我从WPF开始,我想创建一个根据上下文显示形状的网格。因此,例如在一个单元格中,我可以有一个圆形或一个矩形!
我创建了自定义圈“Circle.Xaml”和我的自定义矩形“Rectangle.Xaml”。我还创建了他们的View-Models“CircleVM.Cs”和“RectangleVM.Cs”。
现在,我在我的应用程序中添加了一个listBox,让用户在我的网格单元格中放置圆形或矩形。
我的问题是:
答案 0 :(得分:1)
当您在DataTemplate
部分中声明Resources
时,您可以选择...您可以为其提供一个名称,然后使用该名称来引用它,或者您将其保留为名称。如果DataTemplate
没有名称(或x:Key
值),则它将自动应用于其中指定类型的所有对象,除非它们具有另一个DataTemplate
表达式集,其名称为{{ 1}}。
因此,您可以将以下内容添加到您的应用DataTemplate
部分(Resources
)中,它将适用于您应用中的所有视图模型:
App.xaml
请注意,您需要添加所需的XML命名空间......如下所示:
<DataTemplate DataType="{x:Type ViewModels:CircleVM}">
<Views:Circle />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:RectangleVM}">
<Views:Rectangle />
</DataTemplate>
现在,每当您将xmlns:ViewModels="clr-namespace:YourApplicationName.FolderNameIfApplicable"
xmlns:Views="clr-namespace:YourApplicationName.FolderNameIfApplicable"
类的实例添加到用户界面时,都会显示相关的CircleVM
文件:
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