繁体   English   中英

到DataGrid列的多个绑定

[英]Multiple Bindings to DataGrid Column

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

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

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

像这样:

<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等属性。 如果我需要支持双向绑定和验证,那将是必经之路。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM