c# - 根据绑定(bind)的 View 模型实例显示 ui 控件

标签 c# wpf mvvm binding interface

在 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 模型(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 绑定(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/

相关文章:

c# - 准备必须以某种方式交互在一起的松散耦合的 ViewModel 的良好实践是什么

c# - 销毁对象时自定义事件是否需要设置为null?

c# - 在自定义 UserControl 上强制使用透明背景

c# - WPF MVVM Light - 在工作完成前显示通知

c# - 多个窗口导航相同的数据集合

c# - Bing map 与 C# 和 MVVM 信息框和图钉绑定(bind)

c# - LINQ Join 的内存使用情况是多少?

c# - 从 FTP 下载 ZIP 文件并复制到网站内的文件夹

MvvmCross:如何导航到 ViewModel 以外的地方?

windows-phone-7 - WP7 PanoramaItem 绑定(bind)第二个 PanoramaItem