根据绑定的viewmodel实例显示ui控件

时间:2015-09-28 10:02:48

标签: c# wpf mvvm binding interface

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

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的控件?

或者这是不好的做法?

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用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绑定到View模型中的属性,这是一个简单的示例

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

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

您的XAML将如下所示:

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

ContentPresenter会自动选择AView分配给数据类型A并相应地显示视图。这样,您就可以在ISomeInterface属性中放置继承MyThing任何ContentPresenter会更改其内容以匹配更改。

DataTemplate中定义这些ResourceDictionary资源是个好主意。