嵌套网格中的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将像ListViewItemTemplate一样充当模板。 但是只填充顶部(0,0) Grid

我应该采取哪些步骤,以便内部Grid像模板一样,并且所有4个Grids都被创建并填充?

使用ItemsControl ,其中ItemsSourceTest的列表,并使用外部Grid填充ItemsPanel ,使用内部Grid填充ItemTemplate

                                

并且因为ItemsControl将在ContentPresenter包装项,您需要将Grid.ColumnGrid.Row绑定移动到ItemContainerStyle

编辑

ItemsControl是显示某些内容列表的最基本控件。 像ListBoxListViewComboBoxDataGrid甚至MenuItem这样的ListBox它们都inheritance自ItemsControl在顶部添加了更多function,如选择或列视图。

ItemsPanel定义了常规项容器的外观,而ItemTemplate定义了集合中每个项目的外观。

每个ItemsControl都有其项容器类型。 对于ListBox ,它将是ListBoxItem ,对于ListView ,它将是ListViewItem ,依此类推,对于ItemsControl它是ContentPresenter 。 它只是一个可视容器,其中列表的每个项目都作为内容放置,然后 – 根据层次结构MSDN:备注部分 – 转换为可视化。 在可视化树中,此容器是items面板的直接子项,因此必须根据它设置Grid.Column和/或Grid.Row列表。 另外,例如对于ListBox它是包含IsSelected属性的ListBoxItem 。 更改容器或获取容器数据的方法是通过ItemContainerStyle