如何实现需要viewmodel数据的WPF ValueConverter?

时间:2011-02-24 10:57:25

标签: c# wpf ivalueconverter valueconverter

我正在编写一个具有viewmodel和显示的usercontrol的应用程序 此视图模型中的数据。 viewmodel包含一个实体“Appointment”,以及那些 约会有一个属性“UserName”。

当我显示约会时,我想使用值转换器来获取颜色 用户(取决于“UserName”),但颜色不包含在实体“Appointment”中,所以我想创建一个使用viewmodel中的实体“User”的值转换器。

在转换器中使用viewmodel中的另一个实体的最佳方法是什么?

是否可以从usercontrol访问viewmodel?我试图将转换器放在我的viewmodel-class中,但是我可以从usercontrol访问这个类吗?

我发现以下可能性可能有效:

  1. 调整viewmodel,以便每个约会也包含颜色。但我不想这样做,因为我不想搞砸视图模型。

  2. 在启动时从包含viewmodel的类中设置converter-parameter。 (这有用吗?)

  3. 使用x:引用将转换器参数数据绑定到编译时未知的viewmodel。(这可能吗?)

2 个答案:

答案 0 :(得分:2)

转换器参数是要走的路。

为什么viewmodel在编译时未知? 无论如何,绑定都不是编译时间。

UserControl.DataContext是否设置为Appointment的实例,您应该能够将参数设置为{Binding UserName}或{Binding Appointment.UserName},具体取决于您在UserControl上设置的DataContext的确切内容。

答案 1 :(得分:1)

我建议您重新检查一下您不愿意修改视图模型。首先拥有视图模型的目的是使视图所需的所有内容都可以在一个地方找到。使用精心设计的值转换器来防止修改视图模型是一种越多不可维护的方法。