在基于MVVM的WPF应用程序中,我有许多不同的ViewModel类型可以动态加载到ContentControls或ContentPresenters中。因此,我需要明确设置要在XAML中使用的DataTemplate:
<ContentControl Content={Binding SomePropertyOfTypeViewModel} ContentTemplate={StaticResource someTemplate} />
现在我的问题是即使ContentControl没有绑定(bind)任何内容控件(即ViewModel.SomePropertyOfTypeViewModel为null),内容控件仍显示someTemplate的用户界面
是否有一种快速简便的方法来使所有ContentControl在当前未绑定(bind)的情况下什么也不显示?当我使用隐式DataTemplates时,一切都会按预期进行。不幸的是,我不能在这里使用这种机制。

更新:

我当前的解决方案是为每个ViewModel都具有一个额外的bool Visible属性,该属性在父ViewModels中作为属性公开。仅当属性不为null时,它才返回true。 ContentControl的可见性已绑定(bind)到此属性。ParentViewModel.SomePropertyOfTypeViewModelVisible, ParentViewModel.SomeOtherPropertyOfTypeViewModelVisible ...

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

这不是很令人满意,因为我必须维护很多额外的属性。

最佳答案

设置ContentControl的“可见性”是否可以解决您的问题?如果是这样,则可以在ViewModel中创建要绑定(bind)到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;
        }
    }

关于mvvm - ContentControl的DataTemplate默认可见性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2758936/

10-11 00:49