2016-08-16 4 views
-1

MVVM Light 라이브러리를 사용하여 응용 프로그램 (C#, wpf)을 개발 중입니다. ViewModel이 첨부 된 기본 창에 DataContext="{Binding Main, Source={StaticResource Locator}}"이 있습니다. 괜찮아. 하지만 다른 메인 컨트롤에는 UserControls가 있습니다. 문제는 UserControl을위한 뷰 모델을 선언하고 UC DataContext에 연결하는 방법입니다MVVM Light에서 UserControl의 ViewModel을 선언/연결하는 방법

<DataTemplate DataType="{x:Type model:Type1}"> 
     <controls:UC1 Content="{Binding}"/> 
    </DataTemplate> 

: 어느 순간에 사용되는 일이 같은 전환기에 의해 정의된다. 이것이 디자인 타임 데모 데이터를 지원한다면 매우 유용 할 것입니다.

+0

가 왜 "UserControl을위한 뷰 모델을 선언하고 UC의 DataContext에 연결하기 위해"할 것이다 추가하려고? 이 작업은 DataTemplates 및 ContentControls를 올바르게 사용할 때 자동으로 수행됩니다. 이는 1) 사용자가 아니거나 2) 사용자 컨트롤의 동작을 제어하기 위해 뷰 모델을 구체적으로 생성하고 있음을 나타냅니다. # 1이 사실이라면 당신의 질문에서 말할 수 없습니다. # 2가 사실이라면 그만하십시오. TextBox에 TextBoxViewModel이 있습니까? MVVM! = 코드 숨김이 없습니다. UI 로직이 코드 숨김에 포함됩니다. – Will

+0

@ Will 예 지금 UC DataContext를 연결합니다. 그리고 내 주요 목표는 UC 행동 (# 2)을 제어하는 ​​것입니다. 내가하고 싶은 이유는 UC가 다소 복잡하기 때문입니다. (실제로 각 컨트롤은 작은 프로그램이지만, 주 윈도우 아래에 여러 개를 통합하려고합니다). –

+0

UserControls의 동작을 제어하는 ​​ViewModel을 생성하면 장난을 유발할 수 있습니다. 가장 자주 DataContext의 흐름을 방해하여. 의사 DataContext와 유사한 속성을 뷰 모델에 바인딩하거나 DataContext에있는 것을 저글링하는 데 문제가있는 경우가 있습니다. 해결책은 이것을하지 않는 것입니다. 코드 숨김에 UI 로직을 넣으십시오. – Will

답변

-1

<DataTemplate DataType="{x:Type model:Type1}"> 
    <controls:UC/> 
</DataTemplate> 

또한

<ContentPresenter Content="{Binding ViewModelObj}"> 
</ContentPresenter> 
+0

"질문은 UserControl의 ViewModel을 선언하고이를 UC에 연결하는 방법입니다. –

+0

+0

@ASMahadik : 대답을 수정해야 새로운 정보를 포함 할 수 있습니다. 그런 식으로 모든 독자는 댓글 기록을 읽지 않고도 전체 답변을 이해할 수 있습니다. –