2010-05-03 74 views
1

在我的基於MVVM的WPF應用程序中,我有很多不同的ViewModel類型動態加載到ContentControls或ContentPresenters中。爲此我需要顯式地設置的DataTemplate就是在XAML中使用:ContentControls的DataTemplate默認可見性

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

現在我的問題是,內容控制顯示的someTemplate的UI即使ContentControl中必然要什麼(即視圖模型。 SomePropertyOfTypeViewModel爲空) 有沒有一種簡單快捷的方法讓所有的ContentControls都不顯示任何內容?當我使用隱式DataTemplates時,一切都按預期工作。不幸的是,我不能在這裏使用這個機制。

更新:

我目前的解決辦法是有一個額外的bool Visible財產暴露在父的ViewModels屬性每個視圖模型。僅當該屬性不爲空時它才返回true。 ContentControl的Visiblibtyty綁定到這個屬性。 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

這正是我試圖避免的。這樣我就不得不引入大量新的bool屬性,每個ViewModel對象通過一個屬性公開:'ParentViewModel.Child1Visiible,ParentViewModel.Child2Visible ...'我希望得到一個更通用的解決方案,也不需要每個ContentControl都有很多額外的xaml – bitbonk 2010-05-04 05:43:02

相關問題