嵌套网格中的XAML数据绑定
我在XAML中创建了一个嵌套网格,目前看起来像这样:
我的目标是填充遵循内部Grid
模板的4个Grids
Grid
。 我通过使用以下代码尝试了这一点:
List tests = new List(); for (int i = 0; i < 2; i++) { for (int j = 0; j < 2; j++) { Test t = new Test(); t.Title = i + "\t" + j; t.Row = i; t.Col = j; tests.Add(t); } } mainGrid.DataContext = tests;
和class级定义:
class Test { public string Title { get; set; } public int Row { get; set; } public int Col { get; set; } public ObservableCollection Names { get { return new ObservableCollection() { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J"}; } } }
我的想法是,对于外部Grid
定义的每个部分(0,0&0,1和1,0和1,1),我有4个具有行/列定义的对象。 内部Grid
将像ListView
的ItemTemplate
一样充当模板。 但是只填充顶部(0,0) Grid
。
我应该采取哪些步骤,以便内部Grid
像模板一样,并且所有4个Grids
都被创建并填充?
使用ItemsControl
,其中ItemsSource
是Test
的列表,并使用外部Grid
填充ItemsPanel
,使用内部Grid
填充ItemTemplate
并且因为ItemsControl
将在ContentPresenter
包装项,您需要将Grid.Column
和Grid.Row
绑定移动到ItemContainerStyle
编辑
ItemsControl
是显示某些内容列表的最基本控件。 像ListBox
, ListView
, ComboBox
, DataGrid
甚至MenuItem
这样的ListBox
它们都inheritance自ItemsControl
在顶部添加了更多function,如选择或列视图。
ItemsPanel
定义了常规项容器的外观,而ItemTemplate
定义了集合中每个项目的外观。
每个ItemsControl
都有其项容器类型。 对于ListBox
,它将是ListBoxItem
,对于ListView
,它将是ListViewItem
,依此类推,对于ItemsControl
它是ContentPresenter
。 它只是一个可视容器,其中列表的每个项目都作为内容放置,然后 – 根据层次结构MSDN:备注部分 – 转换为可视化。 在可视化树中,此容器是items面板的直接子项,因此必须根据它设置Grid.Column
和/或Grid.Row
列表。 另外,例如对于ListBox
它是包含IsSelected
属性的ListBoxItem
。 更改容器或获取容器数据的方法是通过ItemContainerStyle
。