2011-04-18 160 views
1

让我们假设有下面的类(例如目的):WPF数据网格动态绑定列

public class Item 
{ 
    public String Key {get;set;} 
    public String[] Values { get; set;} 
} 

用于使得简单,设想的每个“物品”的长度的‘值’的数组是相同。 让我们这些 “项目” S的集合:

例A:

List<Item> items = new List<Items>(
    new Item() { Key = "A", Values = new String[]{"OneA", null, "ThreeA"}}, 
    new Item() { Key = "B", Values = new String[]{"OneB", "TwoB", null}}, 
    new Item() { Key = "C", Values = new String[]{null, null, "ThreeC"}} 
); 

例B:

List<Item> items = new List<Items>(
    new Item() { Key = "1", Values = new String[]{"One1", null}}, 
    new Item() { Key = "2", Values = new String[]{"One2", "Two2"}}, 
    new Item() { Key = "3", Values = new String[]{null, null}} 
); 

所以,我怎么可以做一个DataGrid从具有在以下columsn工具包下例:

例A:

A | OneA | ____ | ThreeA | 

B | OneB | TwoB | ______ | 

C | ____ | ____ | ThreeC | 

例B:

1 | OneA | ____ | 

2 | OneB | TwoB | 

3 | ____ | ____ | 

所以,在词:在不同情况下的值的阵列具有不同的长度。但是对于一种情况,所有的Values数组都具有相同的长度(为了简化)。

如果DataGridInstance.ItemsSource绑定到项目(NotifyPropertyChanged已实现),那么将如何设置列以及如何设置列值的绑定?

当然在每个刷新DataGridInstance.Columns.Clear()是说。 比列再次被添加,它们的数量是众所周知的(取决于当然“值”数组的长度)。

但我将如何创建值的绑定?

我想有像下面这样:

Binding columnABinding = new Binding("Values[0]"); 
Binding columnBBinding = new Binding("Values[1]"); 
Binding columnCBinding = new Binding("Values[3]"); 

呃,对不起,我的英语不好。我试图保持简单,希望它是可以理解的! 非常感谢您提前给出答案!

回答

0

有一个similar question问最近,根据我在那里的答案我怀疑你可以绑定列本身。要刷新列,您可以订阅其中一个项目的PropertyChanged事件,并且如果数组的长度发生更改,则可以重建列。如果DataContext发生变化并且新项目正在以此方式进行调用,则可能还需要处理DataContextChanged事件以进行刷新。