【发布时间】:2019-08-02 13:06:23
【问题描述】:
嘿,我正在使用 wpf 和 mvvm。我有一个普通的 wpf 窗口,我在其中将某个视图模型分配给 DataContext。窗口中有一个Combobox。在Combobox 的设置器中,我想更改Window 某个区域的内容。所以Combobox中有5个选项,我创建了5个不同的UserControl实例,它们对应于这些选项。如何通过绑定更改UserControl?
因为直到现在我通过<local:MYUSERCONTROLL datacontext= UsercontrollVM> 包含了一个UserControl
所以在我的一般视图模型中,我可以通过为 UsercontrollVM 分配一个新值来更改 UserControl-ViewModel。但是,如果我不仅要更改视图模型,还要更改视图本身 - UserControl - 我该怎么做?
就像<locl:MYUSERCONTROLL> 一样,我不知道如何在那里连接绑定,因为它已经是硬编码的......
有人可以帮助我吗?
如果没有人知道我将选择的解决方案:我将在 XAML 中放入所有 5 个不同的 UserControl 元素,然后放入 Visibility={Binding Option1},然后仅显示在 Combobox 中选择的选项,但是那样做好像很丑!
【问题讨论】:
-
好吧,您可以使用触发器。但可能有比用户控件更好的东西:类型定位数据模板。针对特定 VIewModel 类的数据模板,根据您公开的类别,将选择不同的模板。
-
将组合框绑定到视图模型集合,并使用数据模板将组合框视图模型中的选定内容显示为视图。
-
当然,这也可能是注册卡的情况,而不是组合框。
-
你的 Shift 键坏了吗?
-
你应该看看模板。您通常使用
DataTemplate来描述基于数据类型的Control的视觉外观。然后,您可以在视图模型中简单地切换数据源的数据类型,或者让用户通过选择不同的类型来完成。如果数据类型相同,您可以定义多个DataTemplate,并使用DataTemplateSelector来切入和切出相应的DataTemplate。