我正在为对象实例层次结构创建一个编辑器。编辑器有一个面板,其子控件根据对象的字段而有所不同。因此,对于具有整数字段的类型 A,它将具有微调器控件;对于具有字符串字段的类型 B,它将具有一个 TextBox。等等。
问题是,你如何在 MVVM 中实现这一点?
您可以ContentControl
在 XAML 代码中使用并绑定到某种类型(事件系统类型 - 您想要的):
<ContentControl Content="{Binding YourProperty}"/>
(YourProperty 是附加到视图的 ViewModel 的属性)
那么你必须创建渲染视图的 DataTemplate:
<DataTemplate DataType="{x:Type system:int}">
<views:MyWindow/>
</DataTemplate>
系统和视图是您的 xaml 代码中的命名空间。在此示例中,我使用 system:int 类型,但它可以是您的自定义类型。MyWindow
是一个UserControl
对象 - 所以你基本上UserControl
在你的解决方案中创建另一个 WPF 文件。
它是这样工作的。ContentControl
得到它Content
并检查它的类型。它寻找DataTemplate
可以将此类型转换为View
可以呈现为Content
.
此致