在我基于MVVM的WPF应用程序中,我有很多不同的ViewModel类型,它们动态加载到ContentControls或ContentPresenters中。因此,我需要明确地设置要在XAML中使用的DataTemplate:
<ContentControl Content={Binding SomePropertyOfTypeViewModel} ContentTemplate={StaticResource someTemplate} />
现在我的问题是内容控件显示的是someTemplate
的UI,即使ContentControl没有绑定(即ViewModel.SomePropertyOfTypeViewModel为null)
是否有一种快速简便的方法可以使所有ContentControls在没有任何内容的情况下显示任何内容?当我使用隐式DataTemplates时,一切都按预期工作。不幸的是我不能在这里使用这种机制。
更新
我目前的解决方案是为每个ViewModel提供一个额外的bool Visible
属性,该属性在父ViewModel中作为属性公开。仅当属性不为null时,它才返回true
。 ContentControl的Visiblibilty绑定到此属性。
ParentViewModel.SomePropertyOfTypeViewModelVisible, ParentViewModel.SomeOtherPropertyOfTypeViewModelVisible ...
<ContentControl Content={Binding SomePropertyOfTypeViewModel} Visibility={Binding SomePropertyOfTypeViewModelVisible, Converter={StaticRresource boolToVisibiltyConverter}}" />
这不是很令人满意,因为我必须保留很多额外的属性。
答案 0 :(得分:0)
设置ContentControl的“可见性”可以解决您的问题吗?如果是这样,在ViewModel中,您可以为要绑定的ContentControl的Visibility创建Visibility属性。在属性中,您可以检查SomePropertyOfTypeViewModel是否为null。设置SomePropertyOfTypeViewModel时,您还需要通知ContentControlVisibility属性已更改。
<ContentControl Content={Binding SomePropertyOfTypeViewModel} Visibility={Binding ContentControlVisibility} />
public Visibility ContentControlVisibility
{
get
{
return SomePropertyOfTypeViewModel == null ? Visibility.Collapsed : Visibility.Visible;
}
}
答案 1 :(得分:0)
使用TemplateSelector似乎一样好。