2010-05-03 3 views
1

내 MVVM 기반 WPF 응용 프로그램에는 ContentControls 또는 ContentPresenters에 동적으로로드되는 여러 ViewModel 유형이 있습니다. 그 때문에 나는 명시 적으로 DataTemplate을이 XAML에서 사용되는 것을 설정해야합니다ContentControls에 대한 DataTemplate 기본 가시성

이제

<ContentControl Content={Binding SomePropertyOfTypeViewModel} ContentTemplate={StaticResource someTemplate} />

내 문제는 ContentControl을이 즉, 뷰 모델 (아무것도에 바인드되고있는 경우에서도, 콘텐츠 컨트롤이 someTemplate의 UI를 표시한다는 것입니다. SomePropertyOfTypeViewModel이 null 임) 현재 ContentControls에 아무 것도 표시되어 있지 않은 경우 모든 ContentControl을 표시 할 수있는 빠르고 쉬운 방법이 있습니까? 내재 된 DataTemplates를 사용할 때 모든 것이 예상대로 작동합니다. 불행히도 나는이 메커니즘을 여기서 사용할 수 없다.

는 업데이트 :

나의 현재 솔루션은 부모 ViewModels의 속성으로 노출되는 각각의 뷰 모델에 대해 하나 개의 추가 bool Visible 속성을 가지고있다. 속성이 null이 아닌 경우에만 true을 반환합니다. ContentControl의 Visiblibilty는이 속성에 바인딩됩니다. 나는 여분의 특성을 많이 유지해야하기 때문에 ParentViewModel.SomePropertyOfTypeViewModelVisible, ParentViewModel.SomeOtherPropertyOfTypeViewModelVisible ...

<ContentControl Content={Binding SomePropertyOfTypeViewModel} Visibility={Binding SomePropertyOfTypeViewModelVisible, Converter={StaticRresource boolToVisibiltyConverter}}" /> 

이 매우 만족하지 않습니다.

답변

0

TemplateSelector를 사용하면 좋은 결과를 얻을 수 있습니다.

0

ContentControl의 '가시성'을 설정하면 문제가 해결됩니까? 그렇다면 ViewModel에서 바인딩 할 ContentControl의 가시성에 대한 Visibility 속성을 만들 수 있습니다. 이 속성에서 SomePropertyOfTypeViewModel이 null인지 확인합니다. SomePropertyOfTypeViewModel을 설정할 때 ContentControlVisibility 속성이 변경되었음을 알리고 싶을 수도 있습니다.

<ContentControl Content={Binding SomePropertyOfTypeViewModel} Visibility={Binding ContentControlVisibility} /> 

public Visibility ContentControlVisibility 
    { 
     get 
     { 
      return SomePropertyOfTypeViewModel == null ? Visibility.Collapsed : Visibility.Visible; 
     } 
    } 
+0

이것은 정확히 내가 피하려고했던 것입니다. 이 방법을 사용하면 속성을 통해 노출 된 각 ViewModel에 대해 하나씩 새로운 bool 속성을 도입해야합니다. 'ParentViewModel.Child1Visiible, ParentViewModel.Child2Visible ...'나는 더 일반적인 해결책을 얻고 싶었습니다. 각 ContentControl에 대한 많은 추가 xaml – bitbonk