在 c#/wpf 中根据绑定(bind)的 View 模型在窗口中显示用户控件的最简单方法是什么?假设我有以下 View 模型:
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 模型(A
和 B
) .
在 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
绑定(bind)到 View 模型中的属性,这是一个简单的示例
public class ViewModel
{
public ISomeInterface MyThing { get; set; }
}
注意:如果需要,请不要忘记实现 INotifyPropertyChanged
。
您的 XAML 将如下所示:
<ContentPresenter Content="{Binding MyThing}"/>
ContentPresenter
将自动选择 AView
分配给数据类型 A
并相应地显示 View 。这允许您将继承 ISomeInterface
的任何内容 放入 MyThing
属性中,ContentPresenter
将更改其内容以匹配变化。
最好在 ResourceDictionary
中定义这些 DataTemplate
资源。
关于c# - 根据绑定(bind)的 View 模型实例显示 ui 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32820304/