如何在WPF DataGrid / ListView / ListBox中添加计算的附加列

时间:2012-12-11 20:10:19

标签: c# .net wpf data-binding

我有一个DataGrid和一个视图模型(MyViewModel1)。 DataGrid绑定到MyViewModel1的Items属性。限制因素是我无法触及MyViewModel1MyClass1的代码。

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列,这取决于Property1Property2,{ {1}},Property3ViewModelProperty1。为了示例,我们假设第4列是ViewModelProperty2。第4列必须显示当前值,因此如果Property1 + Property2 + Property3 + ViewModelProperty1 + ViewModelProperty2增加1,则第4列也必须增加1。我的问题是:我有什么选择呢?

我能想到这些:

  1. ViewModelProperty1与所有因变量一起用作输入。这适用于该示例。这里的问题是,一旦变量的相互作用变得更加复杂,例如IMultiValueConverter,5个变量放在'MultiBinding'中的顺序变得很重要,并且绑定中有很多知识会导致解决方案变得脆弱。

  2. 使用包装器。将((Property1 + 2*Property2) * Property3) ^ (ViewModelProperty1 - ViewModelProperty2)绑定到新类DataGrid,该类注册MyViewModel2上的更改,看起来像

    MyViewModel1
  3. 问题是除了上面提到的2(转换器和包装器)之外,还有哪些方法可以解决这个问题。

    我的问题不是解决这个例子的最佳方式。

1 个答案:

答案 0 :(得分:0)

对不起,我刚看到你已经想到了这个!不是我理解你的反对意见。

您可以将MultiBindingIMultiValueConverter一起使用。请参阅IMultiValueConverter文档中的示例。

(从这里:https://stackoverflow.com/a/2002598/360211