对DataGrid列的多个绑定

时间:2010-08-13 18:15:09

标签: c# wpf

是否可以将两个不同的数据绑定到同一个DataGrid列。假设我有一个具有属性p1的类A,并且我有另一个具有属性p2的类B.是否可以将p1和p2绑定到同一个datagrid列?

3 个答案:

答案 0 :(得分:2)

您可以使用DataGridTemplate列,该列包含两个不同的控件,每个控件都绑定到不同的属性。

答案 1 :(得分:1)

最简单的方法可能是MultiBinding。这是一个simple example如何使用MultiBinding(它利用我喜欢的StringFormat属性)。

答案 2 :(得分:1)

这样的事情:

<StackPanel>
   <TextBlock Text="{Binding ClassAProperty}"/>
   <TextBlock Text="{Binding ClassBProperty}"/>
</StackPanel>
只要类没有任何具有相同名称的属性,

就可以工作。但这是一种丑陋的黑客攻击,并祝你在这种方法产生的所有虚假绑定错误中发现真正的绑定错误。

每个类型属性到列的映射必须存在于某个地方,但它不必存在于XAML中,而这不是我所说的。我会在我的视图模型中做到这一点。假设我还没有我的ClassA和ClassB对象的视图模型类(并且我不想创建它们),我实现了这样的事情:

public class DataGridHelper
{
   public Wrapper(object o)
   {
      ClassA a = o as ClassA;
      if (a != null)
      {
         Column1 = a.Property1;
         Column2 = a.Property2;
         ...
      }

      ClassB b = o as ClassA;
      if (b != null)
      {
         Column1 = b.Property1;
         Column2 = b.Property2;
         ...
      }

      public object Column1 { get; private set; }
      public object Column2 { get; private set; }
}

...然后将DataGrid的列绑定到DataGridHelper个对象的集合。

如果我 ClassAViewModelClassBViewModel个类,我只会在两者中实现Column1Column2等属性。如果我需要支持双向绑定和验证,那就是要走的路。