2010-12-14 1 views
0

WPF UserControl View/ViewModel 쌍을 작성했습니다. 뷰 XAML이 레이아웃과 바인딩을 처리하고 ViewModel이 권장되는 인라인으로 논리를 처리합니다 MVVM 패턴.WPF ViewModel/View UserControl 컨트롤을 컨트롤로 캡슐화하는 방법

저는 이것을 컨트롤로 다시 사용할 수 있기를 바랍니다.

보기와 연결된 ViewModel을 숨기거나 캡슐화하여 표준 컨트롤 [버튼처럼]을 사용할 수 있도록하려면 어떻게해야합니까?

즉 컨트롤의보기 모델을 숨기려면 어떻게해야합니까?

답변

2

은 ViewModel 클래스를 컨트롤에 바인딩하는 방법에 따라 다릅니다. 이 같은한다면 :

YourControl() 
{ 
    DataContex = new ViewModel(); 
} 

을 한 후 나는 어떤 문제를 볼 수 없습니다. 귀하의 컨트롤에 참조를 추가하고 그것을 사용하십시오.

+0

내 컨트롤이 텍스트 (검색 문자열) 상자와 목록 상자로 구성되어 있다고 가정 해 보겠습니다. 제어용 VM은 두 개의 콜렉션을 특성으로 표시합니다. 1. 항목의 전체 목록, 2. 현재 검색 문자열과 일치하는 항목의 목록. 또한 두 개의 속성을 노출합니다 : 1. 선택한 항목에 대해 2. 검색 문자열에 대해. 컨트롤의 주요 datacontext는 자체 내부 VM입니다. 위에서 제안한 것처럼 할 수 있습니다. 그러면 '중간'속성을 뷰에 표시하여 부모보기의 소품에 바인딩 할 수 있습니다. . –

+1

컨트롤 (View 클래스)의 종속성 속성 (DP)으로 '중간'속성을 만들고 부모 컨트롤에서 DP가있는 다른 컨트롤과 같이 사용합니다. – Arseny

0

ViewModel을 XAML 내에서 StaticResource로 만들 수 있습니다. ViewModel에 DataContext를 설정하는 문제는 더 이상 사용자가 컨트롤을 사용하는 창이나 페이지에서 DataContext를 사용할 수 없다는 것입니다. 당신의 XAML에서

<myNS:MyViewModel x:Key="ViewModel /> 

참조 뷰 모델 : : 당신의 XAML에서

당신의 ViewModel을 선언

<TextBlock Text="{Binding Source={StaticResource ViewModel}, Path=TextToBind}" /> 

을 코드에 액세스하고 신속하게 초기화 할 수 있습니다 뒤에, 나는 보통의 특성을 내 뷰 모델을 쉽게 참조 할 수 있습니다.

private MyViewModel viewModel 
{ 
    get { return this.Resources["ViewModel"] as MyViewModel; } 
}