我有一个场景需要我将对象列表绑定到网格。我希望这样的行为: -
•当项目添加到列表中时,它将移动到网格中的下一个可用空间。 (像一个包装板)
以下显示的是我目前的XAML。
<ItemsControl ItemsSource="{Binding Path=Contents}" Grid.Row="1">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<cc:DynamicGrid ShowGridLines="True" RowCount="{Binding Path= SelectedGridStyle.RowCount}" ColCount="{Binding Path=SelectedGridStyle.ColCount}"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
目前,这会将所有项目放在彼此之上,因为我没有指定行索引或列索引。我打算添加以下内容来纠正这个
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Grid.Column" Value="{Binding Path=ColumnIndex}"/>
<Setter Property="Grid.Row" Value="{Binding Path=RowIndex}"/>
<Setter Property="Grid.ColumnSpan" Value="{Binding Path=ColumnSpan}"/>
<Setter Property="Grid.RowSpan" Value="{Binding Path=RowSpan}"/>
</Style>
</ItemsControl.ItemContainerStyle>
我有以下代码,它允许我从列表中的索引计算rowIndex和columnIndex。
int m_ColumnCount = 3;
int rowIndex = index / m_ColumnCount;
int columnIndex = index - (rowIndex * m_ColumnCount);
我正在尝试使用上面的方法创建一个绑定转换器来设置这些值。但是,此计算取决于视图模型中保留的列数和行数的值。有没有办法获得这些价值?可以实现上述目标还是有更好的解决方案?
答案 0 :(得分:1)
如果绑定需要多个值,则可以使用MultiBinding
。要绑定到主视图模型,您可以使用RelativeSource
定位ItemsControl
。
答案 1 :(得分:1)
查看此内容 - http://www.switchonthecode.com/tutorials/wpf-tutorial-using-multibindings
你会看到大约使用多重绑定的一半,这很简单。然后他们会告诉你如何为它创建一个转换器。听起来你熟悉转换器,所以我认为这篇文章会让你感动。