C# 如何实现需要来自viewmodel的数据的WPF ValueConverter?

C# 如何实现需要来自viewmodel的数据的WPF ValueConverter?,c#,wpf,ivalueconverter,valueconverter,C#,Wpf,Ivalueconverter,Valueconverter,我正在编写一个应用程序,它有一个viewmodel和一个显示 来自此viewmodel的数据。viewmodel包含一个实体“约会”,以及 约会有一个属性“用户名” 当我显示约会时,我想使用值转换器来获取约会的颜色 用户(取决于“用户名”),但颜色不包含在实体“约会”中,因此我想创建一个值转换器,使用viewmodel中的实体“用户” 在转换器内使用viewmodel中的另一个实体的最佳方式是什么 是否可以从usercontrol访问viewmodel?我试图将转换器放在viewmodel类中,

我正在编写一个应用程序,它有一个viewmodel和一个显示 来自此viewmodel的数据。viewmodel包含一个实体“约会”,以及 约会有一个属性“用户名”

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

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

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

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

  • 调整viewmodel,使每个约会也包含颜色。但我不想这样做,因为我不想弄乱viewmodel

  • 从启动时也包含viewmodel的类中设置转换器参数。(这有用吗?)

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


  • 转换器参数是解决问题的方法

    为什么viewmodel在编译时未知? 无论如何,绑定都不会在编译时进行检查


    如果UserControl.DataContext被设置为约会实例,您应该能够将参数设置为{Binding UserName}或{Binding Appointment.UserName},具体取决于您在UserControl上设置为DataContext的内容。

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

    DataContext被设置为约会的ObservableCollection,正如您所说,可以从约会中获取数据,比如用户名。但是UserColor属性不包含在约会中,只能使用驻留在另一个命名空间中并承载整个viewmodel的另一个类来检索。我想这确实是最简单的方法。而且也是性能最好的一个…但是我不喜欢现在必须打包我从WCF服务中获取的约会类…这不是视图模型所做的吗?