我有ContainerViewModel
继承Conductor<T>.Collection.AllActive
和PanelViewModel
,其继承Screen
且其生命周期由ContainerViewModel
我的ContainerView
使用templated
ItemsControl
呈现由指挥管理的Collection<T>
。此视图目前使用UniformGrid
控件,items
按照添加到Conductor<T>.Collection
的顺序显示(Items
已移除并添加到run-time
}通过event
提供Position
)。
我想切换为使用预定义数量为Grid
和Columns
的{{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 |
+------------------------------------------------------+
以及Position
和Points
下的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}}需要PanelViewModel
和Content
属性的概念才能将其挂钩。我对此并不完全满意,因为我认为ColumnIndex
负责管理定位。
我是否有办法实现这一点,只有RowIndex
知道ContainerViewModel
概念?
答案 0 :(得分:0)
将ContainerViewModel
作为PanelViewModel
字段传递给parent
,并在调用{{1}的获取者时让PanelViewModel
将呼叫传递回parent
}}和ColumnIndex
属性通过将自身作为参数传递给该调用,即RowIndex
和parent.GetColumnIndex(this)
虽然这意味着parent.GetRowIndex(this)
现在知道PanelViewModel
,但它可以实现您在ContainerViewModel
和ColumnIndex
所需的内容,同时RowIndex
的属性在PanelViewModel
。
您可以进一步将方法调用抽象到接口,以便父字段属于接口类型而不是类型ContainerViewModel
- 它取决于ContainerViewModel
的可能性被其他类型包含。