wpf datagrid动态绑定列

时间:2011-04-18 14:14:13

标签: wpf datagrid binding

我们假设有以下类(例如用途):

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

为简单起见,想象每个“Item”的“Values”数组的长度是相同的。 让我们收集这些“项目”:

例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}}
);

那么在下一种情况下如何从ToolKit中创建一个DataGrid,其中包含以下columsn:

例A:

 A | OneA | ____ | ThreeA |

 B | OneB | TwoB | ______ |

 C | ____ | ____ | ThreeC |

例B:

 1 | OneA | ____ |

 2 | OneB | TwoB |

 3 | ____ | ____ |

因此,在单词中:在不同情况下,Values数组具有不同的长度。但是对于一种情况,所有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]");
呃,抱歉我的英语不好。我试着保持简单,希望这是可以理解的! 提前感谢您的回答!

1 个答案:

答案 0 :(得分:0)

最近有一个similar question被问到,根据我在那里的回答,我怀疑你可以绑定列本身。要刷新列,您可以订阅其中一个项的PropertyChanged事件,如果更改了数组的长度,则可以重建列。如果DataContext发生更改并且新项目以这种方式提交,您可能还需要处理要刷新的DataContextChanged事件。