C# 绑定到网格的特定行和列
我有一个C# 绑定到网格的特定行和列,c#,wpf,xaml,caliburn.micro,C#,Wpf,Xaml,Caliburn.micro,我有一个ContainerViewModel继承了Conductor.Collection.AllActive和一个PanelViewModel继承了Screen,其生存期由ContainerViewModel控制 MyContainerView使用模板化的项控件呈现由售票员管理的My集合。此视图当前使用UniformGrid控件,项按其添加到导体的顺序显示。集合(项通过提供位置的事件在运行时删除和添加) 我想切换到使用具有预定义数量的列和行的网格,如下所示: +----------------
ContainerViewModel
继承了Conductor.Collection.AllActive
和一个PanelViewModel
继承了Screen
,其生存期由ContainerViewModel
控制
MyContainerView
使用模板化的项控件
呈现由售票员管理的My集合。此视图当前使用UniformGrid
控件,项
按其添加到导体的顺序显示。集合
(项
通过提供位置的事件在运行时
删除和添加)
我想切换到使用具有预定义数量的列
和行
的网格
,如下所示:
+------------------------------------------------------+
| 1 | 2 | 3 | 4 |
| 0,0 | 0,1 | 0,2 | 0,3 |
+------------------------------------------------------+
| 5 | 6 | 7 | 8 |
| 1,0 | 1,1 | 1,2 | 1,3 |
+------------------------------------------------------+
单个数字表示位置
和行索引和列索引下的点
\坐标
我知道我可以做如下事情:
<ItemsControl ItemsSource="{Binding Items}">
<!-- ItemsPanelTemplate -->
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<!-- ItemContainerStyle -->
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Column"
Value="{Binding ColumnIndex}" />
<Setter Property="Grid.Row"
Value="{Binding RowIndex}" />
</Style>
</ItemsControl.ItemContainerStyle>
<!-- ItemTemplate -->
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我的上述问题是,要显示为内容的PanelViewModel
需要ColumnIndex
和RowIndex
属性的概念,以便将其挂接。我对此并不完全满意,因为我认为管理定位是ContainerViewModel
的责任
如果只有ContainerViewModel
知道位置
概念,我有没有办法做到这一点?将ContainerViewModel
传递到PanelViewModel
作为parent
字段,并在调用ColumnIndex
和RowIndex
属性,方法是将自身作为参数传递给该调用,即parent.GetColumnIndex(this)
和parent.GetRowIndex(this)
虽然这意味着PanelViewModel
现在知道了ContainerViewModel
,但它实现了您所寻找的列索引和行索引的位置,而PanelViewModel
的属性是在ContainerViewModel
中实现的
您可以进一步抽象接口的方法调用,以使父字段属于接口类型,而不是ContainerViewModel
类型-这取决于PanelViewModel
将被其他类型包含的可能性有多大