2010-05-03 67 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