我正在尝试创建具有带状布局的网格,每次加载网格时,带和列的计数都会不同。这意味着网格和列的数据源将在运行时绑定。
我有3个班,A,B,C。
A具有一些属性和类型B的列表。
B具有一些属性和类型C的列表。
C具有一些属性,其中之一是MyName(可公开访问)。
我的网格控件的项目来源是A类的列表,因为我打算显示此层次结构中所有类的值。
List<A> abc = new List<A>();
...
MyGrid.ItemsSource = abc;
现在,每次加载网格时,我都会删除所有现有的带区和列并重新创建它们(因为带区和列的数量是基于外部事件而变化的)。在此过程中,我需要将其中一列绑定到C.MyName上,
GridColumn newColumn = new GridColumn();
newColumn.Binding = new Binding("B.C.MyName");
newColumn.Header = "Name field";
myBand.Columns.Add(newColumn);
MyGrid.Bands.Add(myBand);
...
我在该列中没有看到任何数据条目,但是该列以及相应的带出现在网格中。这些行是空的。
我对绑定的概念还比较陌生,无法理解为什么它不起作用。 谁能帮忙吗?
谢谢。
答案 0 :(得分:0)
我通过反复试验找到了解决方案。
因此,为了创建相关的条带和列,我一直在遍历列表。
假设正在使用 i
遍历B的列表
和 j
用于遍历C列表(如问题所述,它包含在B中)。
要将C的属性绑定到特定列,我们要做的就是:
...
newColumn.Binding = new Binding(String.Format("B[{0}].C[{1}].MyName", i, j));
...
myBand.Columns.Add(newColumn);
...
其余的保持不变。
我错过了从数据源中识别出我们需要考虑将列表中的哪些元素绑定到该列的方法。 String.Format()为我[ Column.Binding = new Binding("path"); ]