绑定到网格的特定行和列

时间:2014-11-24 17:01:18

标签: c# wpf xaml caliburn.micro

我有ContainerViewModel继承Conductor<T>.Collection.AllActivePanelViewModel,其继承Screen且其生命周期由ContainerViewModel

控制

我的ContainerView使用templated ItemsControl呈现由指挥管理的Collection<T>。此视图目前使用UniformGrid控件,items按照添加到Conductor<T>.Collection的顺序显示(Items已移除并添加到run-time }通过event提供Position)。

我想切换为使用预定义数量为GridColumns的{​​{1}},如下所示:

Rows

单个数字代表+------------------------------------------------------+ | 1 | 2 | 3 | 4 | | 0,0 | 0,1 | 0,2 | 0,3 | +------------------------------------------------------+ | 5 | 6 | 7 | 8 | | 1,0 | 1,1 | 1,2 | 1,3 | +------------------------------------------------------+ 以及PositionPoints下的Coordinates \ Row Index

我知道我可以做以下事情:

Column Index

我的上述问题是,要显示为<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> 的{​​{1}}需要PanelViewModelContent属性的概念才能将其挂钩。我对此并不完全满意,因为我认为ColumnIndex负责管理定位。

我是否有办法实现这一点,只有RowIndex知道ContainerViewModel概念?

1 个答案:

答案 0 :(得分:0)

ContainerViewModel作为PanelViewModel字段传递给parent,并在调用{{1}的获取者时让PanelViewModel将呼叫传递回parent }}和ColumnIndex属性通过将自身作为参数传递给该调用,即RowIndexparent.GetColumnIndex(this)

虽然这意味着parent.GetRowIndex(this)现在知道PanelViewModel,但它可以实现您在ContainerViewModelColumnIndex所需的内容,同时RowIndex的属性在PanelViewModel

中实施

您可以进一步将方法调用抽象到接口,以便父字段属于接口类型而不是类型ContainerViewModel - 它取决于ContainerViewModel的可能性被其他类型包含。