是否可以将两个不同的数据绑定到同一个DataGrid列。假设我有一个具有属性p1的类A,并且我有另一个具有属性p2的类B.是否可以将p1和p2绑定到同一个datagrid列?
答案 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
个对象的集合。
如果我 有ClassAViewModel
和ClassBViewModel
个类,我只会在两者中实现Column1
,Column2
等属性。如果我需要支持双向绑定和验证,那就是要走的路。