根据绑定的视图模型实例显示 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 模型(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
绑定到视图模型中的 属性,这是一个简单的示例
public class ViewModel
{
public ISomeInterface MyThing { get; set; }
}
注意:如果需要,请不要忘记实施 INotifyPropertyChanged
。
您的 XAML 将如下所示:
<ContentPresenter Content="{Binding MyThing}"/>
ContentPresenter
将自动选择 AView
分配给数据类型 A
并相应地显示视图。这允许您将继承 ISomeInterface
的 任何内容 放入 MyThing
属性 并且 ContentPresenter
将更改其内容以匹配更改.
最好在 ResourceDictionary
中定义这些 DataTemplate
资源。
在 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 模型(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
绑定到视图模型中的 属性,这是一个简单的示例
public class ViewModel
{
public ISomeInterface MyThing { get; set; }
}
注意:如果需要,请不要忘记实施 INotifyPropertyChanged
。
您的 XAML 将如下所示:
<ContentPresenter Content="{Binding MyThing}"/>
ContentPresenter
将自动选择 AView
分配给数据类型 A
并相应地显示视图。这允许您将继承 ISomeInterface
的 任何内容 放入 MyThing
属性 并且 ContentPresenter
将更改其内容以匹配更改.
最好在 ResourceDictionary
中定义这些 DataTemplate
资源。