WPF 数据绑定(bind)和类型转换

标签 wpf data-binding mvvm

我有一个关于 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/

相关文章:

c# - WPF C# 实现调整 handle 大小

带圆角的 WPF MediaElement

knockout.js - 用于检查的 knockoutjs radio 整数数据绑定(bind)不起作用

android - 更改 LiveData 时 DataBinding 不会更新值

Java Play - 将对象列表与内部的 Map<String, AnotherObject> 绑定(bind)

c# - 列表框不显示特定对象的值(数据绑定(bind))

android - StateFlow 在后退导航中再次获取相同的数据

c# - 如何绑定(bind)到一个数据源但从另一个数据源更新触发器?

wpf - 在 WPF 中跨 ViewModel 共享模型的最佳/推荐方式是什么?

c# - 如何在 Stimulsoft 报告中使用数据对象?