1

我正在编写一个应用程序,该应用程序具有一个视图模型和一个显示来自该视图模型的数据的用户控件。视图模型包含一个实体“约会”,这些约会具有一个属性“用户名”。

当我显示约会时,我想使用值转换器为用户获取颜色(取决于“用户名”),但颜色不包含在实体“约会”中,所以我想创建一个值-使用视图模型中的实体“用户”的转换器。

从转换器内部的视图模型中使用另一个实体的最佳方法是什么?

是否可以从用户控件访问视图模型?我试图将转换器放在我的视图模型类中,但我可以从用户控件访问这个类吗?

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

  1. 调整视图模型,使每个约会也包含颜色。但我不想这样做,因为我不想弄乱视图模型。

  2. 在启动时从还包含视图模型的类中设置转换器参数。(这行得通吗?)

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

4

2 回答 2

2

转换器参数是要走的路。

为什么视图模型在编译时是未知的?无论如何,绑定都不会在编译时检查。

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

于 2011-02-24T11:09:16.733 回答
1

我建议你重新审视你不愿意修改视图模型。首先拥有视图模型的目的是让视图所需的一切都可以在一个地方找到。想出精心设计的值转换器来防止修改视图模型是一种越做越难以维护的方法。

于 2011-02-24T16:19:37.033 回答