我有一个DataGrid
和一个视图模型(MyViewModel1
)。 DataGrid
绑定到MyViewModel1
的Items属性。限制因素是我无法触及MyViewModel1
和MyClass1
的代码。
public class MyViewModel1 : INotifyPropertyChanged
{
...
public ObservableCollection<MyClass1> Items { get { ... } }
public int ViewModelProperty1 { get { ... } }
public int ViewModelProperty2 { get { ... } }
}
public class MyClass1 : INotifyPropertyChanged
{
...
public int Property1 { get { ... } }
public int Property2 { get { ... } }
public int Property3 { get { ... } }
}
我希望DataGrid
不仅显示包含3个已知属性的3列,而且每行显示第4列,这取决于Property1
,Property2
,{ {1}},Property3
和ViewModelProperty1
。为了示例,我们假设第4列是ViewModelProperty2
。第4列必须显示当前值,因此如果Property1 + Property2 + Property3 + ViewModelProperty1 + ViewModelProperty2
增加1,则第4列也必须增加1。我的问题是:我有什么选择呢?
我能想到这些:
将ViewModelProperty1
与所有因变量一起用作输入。这适用于该示例。这里的问题是,一旦变量的相互作用变得更加复杂,例如IMultiValueConverter
,5个变量放在'MultiBinding'中的顺序变得很重要,并且绑定中有很多知识会导致解决方案变得脆弱。
使用包装器。将((Property1 + 2*Property2) * Property3) ^ (ViewModelProperty1 - ViewModelProperty2)
绑定到新类DataGrid
,该类注册MyViewModel2
上的更改,看起来像
MyViewModel1
问题是除了上面提到的2(转换器和包装器)之外,还有哪些方法可以解决这个问题。
我的问题不是解决这个例子的最佳方式。
答案 0 :(得分:0)
对不起,我刚看到你已经想到了这个!不是我理解你的反对意见。
您可以将MultiBinding与IMultiValueConverter一起使用。请参阅IMultiValueConverter文档中的示例。