我有一个关于 WPF 绑定(bind)和转换 XAML 中 UI 对象看到的数据类型的问题。
我有一个用户控件,我想在不同的应用程序中重用它。用户控件显示一个缩略图和几个 TextBlocks 来显示人员的人口统计信息,例如姓名和地址。用户控件用于 MVVM 设计,因此它绑定(bind)到特定于用户控件的 ViewModel。
遵循典型的 MVVM 设计原则,用户控件的 ViewModel 通常嵌入到其他 ViewModel 中以构成更大的 UI。
用户控件 View 模型期望某个类型(类)作为其绑定(bind)对象。
然而,UC 的 VM 嵌入的 ViewModel 具有完全不同的对象模型,因此它们不能简单地将数据传递给 UC 的 VM。需要将父 VM 的数据模型转换为 UC VM 的数据模型。
我的问题是:是否有一种认可的方式来执行这种转换?
我查看了 IValueConverter 和 IMultiValueConverter ,这些看起来不像是要走的路。
我想我需要的是父 VM 和嵌入式 UC VM 之间的一种 shim,其中父 VM 的数据被转换为 UC VM 所需的格式。
或者,它基本上归结为我必须编写一个自定义 UC VM 来处理父 VM 提供的任何类型?
最佳答案
我同意肯,我认为他有答案。如果您有 n 个要传递到通用用户控件的数据配置,那么您希望该数据配置的所有者将其转换为通用表单以绑定(bind)到用户控件。
每个使用该控件的 View 都有一个相应的 View 模型,该模型以通用格式公开一个属性:
public class SampleViewModel {
...
IUserControlData ControlData
{
get
{
// Do conversion here or do it early and cache it.
}
}
...
}
然后您将该属性绑定(bind)到 View 中的用户控件
<common:CommonUserControl DataContext={Binding Path=ControlData} ... >
关于WPF 数据绑定(bind)和类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/722770/