根据绑定的视图模型实例显示 ui 控件

Show ui control depending on the binded viewmodel instance

在 c#/wpf 中根据绑定的视图模型在 window 中显示用户控件的最简单方法是什么?假设我有以下视图模型:

public interface ISomeInterface
{
    string Name { get; set; }
}

public class A : ISomeInterface
{
    public string Name { get; set; }
    public string Size { get; set; }
    public string Age { get; set; }
}

public class B : ISomeInterface
{
    public string Name { get; set; }
    public string Address { get; set; }
    public string Job { get; set; }
}

现在我想对 UI 进行一些控制,这些控制始终存在(来自界面的那些)和一些取决于 bindene 模型(AB) .

在 xaml 中决定是显示模型 A 还是模型 B 的控件的最简单方法是什么?

或者这是不好的做法?

谢谢!

可以使用DataTemplate,利用DataType属性。

xmlns:MyViews="clr-namespace:My.Views.Namespace.Here"    
xmlns:MyClasses="clr-namespace:My.Classes.Namespace.Here"

...

<DataTemplate DataType="{x:Type MyClasses:A}">
    <MyViews:AView/>
</DataTemplate>

用法

您可以使用 ContentPresenter 绑定到视图模型中的 属性,这是一个简单的示例

public class ViewModel
{
    public ISomeInterface MyThing { get; set; }
}

注意:如果需要,请不要忘记实施 INotifyPropertyChanged

您的 XAML 将如下所示:

<ContentPresenter Content="{Binding MyThing}"/>

ContentPresenter 将自动选择 AView 分配给数据类型 A 并相应地显示视图。这允许您将继承 ISomeInterface 任何内容 放入 MyThing 属性 并且 ContentPresenter 将更改其内容以匹配更改.

最好在 ResourceDictionary 中定义这些 DataTemplate 资源。