2011-12-06 76 views
0

我有一個場景,需要我將一個對象列表綁定到網格。我想這樣的行爲: -綁定轉換器使用列表中的項目索引

•當一個項目被添加到列表中時,它將移動到網格中的下一個可用空間。 (如包裝面板)

下面顯示的是我目前的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); 

我試圖創建一個綁定轉換器使用上述設置這些值。但是,此計算取決於視圖模型中保存的列和行數。有沒有辦法獲得這些值?上述可以實現還是有更好的解決方案?

回答

1

如果綁定需要多個值,則可以使用MultiBinding。要綁定到主視圖模型,您可以使用定位ItemsControlRelativeSource