当你DataTemplate
在一个Resources
部分中声明 a 时,你有一个选择……你可以给它一个名字,然后用这个名字来引用它,或者你不给它一个名字。如果 aDataTemplate
没有名称(或x:Key
值),那么它将自动应用于其中指定类型的所有对象,除非它们有另一个DataTemplate
明确设置为 named 的对象DataTemplate
。
因此,您可以将以下内容添加到您的应用程序Resources
部分(在 中App.xaml
),它将应用于您应用程序中的所有视图模型:
<DataTemplate DataType="{x:Type ViewModels:CircleVM}">
<Views:Circle />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:RectangleVM}">
<Views:Rectangle />
</DataTemplate>
请注意,您将需要添加所需的 XML 命名空间......如下所示:
xmlns:ViewModels="clr-namespace:YourApplicationName.FolderNameIfApplicable"
xmlns:Views="clr-namespace:YourApplicationName.FolderNameIfApplicable"
现在,每当您将CircleVM
类的实例添加到 UI 中时,Circle.xaml
都会显示相关文件:
<ContentControl Content="{Binding YourViewModelProperty}" />
要在两个视图模型之间切换,请按上述方式创建一个属性...同样,您有两个选择:
public object YourViewModelProperty // with valid getter/setter removed here
或者更好的是,创建一个BaseViewModel
实现INotifyPropertyChanged
接口的类并从中扩展所有视图模型:
public BaseViewModel YourViewModelProperty // with valid getter/setter removed here
用户更改选择时要采取的最后一步是设置此属性的值:
if (userHasChosenCircle) YourViewModelProperty = new CircleVM();
else YourViewModelProperty = new RectangleVM();