根据绑定的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模型(A
和B
)。
决定xaml的最简单方法是,显示模型A
或模型B
的控件?
或者这是不好的做法?
谢谢!
答案 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
资源是个好主意。