2014-10-02 3 views
2

UserControl의 "인텔리전스"가 viewModel에있는 MVVM 패턴으로 UserControl을 만들었습니다.MVVM UserControl 및 해당 컨트롤을 사용할 때 바인딩

다른 뷰 (xaml)에서 UserControl을 사용하여 해당 뷰의 개발자가 어떻게 수행되었는지 신경 쓸 필요가 없습니다.

내 프로그래머가 일부 컨텍스트 정보를 제어 할 수 있도록 일부 UserControl에 dependencyProperties를 추가했습니다.

하지만 바인딩 문제가 있습니다. client.xaml에서

:

<Grid> 
<MyUserControl MyDependencyProperty0={Binding ClientViewModelProperty0}/> 
</Grid> 

및 TextToDisplay가 MyUserControlViewModel의 속성이다

<Grid> 
<TextBlock Text={Binding TextToDisplay}/> 
</Grid> 

myusercontrol.xaml

. 그것은 자신의 데이터 컨텍스트 (해당 뷰 모델)을 가지고 있기 때문에 내가 한 번만 설정 될 ClientViewModelProperty0 필요, 나는

내가 솔루션이 다른 바인딩 될 가정을 MyUserControl의의 DataContext로 설정 될 clientViewModel 필요하지 않습니다 표현식 구문 (상대 소스 자체?) 그러나 어느 하나를 볼 수 없습니다 ...

+2

"사용자 정의 컨트롤을위한 뷰 모델을 만드는 것은 코드 냄새입니다"라는 답을 나에게 다시 복사 할 시간이 되었습니까? 문제가 발생한 이유는이 때문입니다. 잠깐 생각해보십시오 : TextBox 컨트롤에는 TextBoxViewModel이 있습니까, 아니면 뷰 모델이 바인드하는 속성과 이벤트가 있습니까? 그렇다면 UserControl이 왜 똑같이 작동하지 않는 이유는 무엇입니까? [내 "하지 마!" 답변] (http://stackoverflow.com/questions/25795871/wpf-databinding-with-mvvm-and-user-controls/25796096#25796096) – Will

답변

1

재사용 가능한 컨트롤은 본격적인 응용 프로그램보기와 다소 다른 디자인을 따르는 경향이 있습니다. 특히, 그들은 MVVM을 아주 똑같은 방식으로 따르지 않습니다.

WPF에서는 컨트롤이 "보이지 않는"것을 기억하십시오. 시각적 모양은 템플릿에 의해 관리됩니다. 기본 클래스 은 컨트롤의 "모델"인입니다. @Will이 그의 코멘트에서 언급 한 것처럼 TextBox에는 TextBoxViewModel이 없습니다. TextBox 인스턴스 "보기 모델"입니다. "보기"는 적용되는 템플릿입니다. UserControl는 템플릿 기반 컨트롤에서 약간의 차이가 있지만 (그 내용 자체에 포함 된, 그래서 효과적으로 모두 "보기"및 "보기 모델"이다), 동일한 기본 규칙이 적용

작성 자신의 재사용 가능한 컨트롤, 속성 및 동작을 컨트롤 클래스 자체에 넣습니다. 그런 식으로보기에 연결하면 부모보기 모델에 바인딩하여 매개 변수를 설정할 수 있습니다. 재사용 가능한 컨트롤은 외부/주변 뷰 모델에 의존해서는 안됩니다.