2010-09-26 14 views
6

Vorrei organizzare gli elementi di una raccolta in una griglia con un numero specifico di colonne e righe (ad esempio 4x6). Ogni elemento espone le proprietà di dipendenza (numero intero) X e Y e deve essere collocato nella cella pertinente della griglia. Si noti che la raccolta può cambiare durante il runtime che dovrebbe aggiornare gli elementi della griglia.Organizzazione di elementi di raccolta in una griglia

Non sono riuscito a trovare alcuna soluzione valida. Ma forse è anche possibile senza usare il code-behind?

Non importa la conversione o qualcosa del genere. Questa roba cambia comunque. La classe di raccolta usata non è importante. (Puoi sceglierne uno.)

Come posso risolvere questo problema? Eventuali suggerimenti appropriati saremmo lieti, grazie.

risposta

6
<ItemsControl ItemsSource="{Binding YourItems}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Grid/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemContainerStyle> 
     <Style> 
      <Setter Property="Grid.Column" Value="{Binding X}"/> 
      <Setter Property="Grid.Row" Value="{Binding Y}"/> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
</ItemsControl> 
+1

buona soluzione, anche se è necessario mettere Grid.RowDefinitions e Grid.ColumnDefinitions in là con il massimo di X e Y rispettivamente RowDefinition e ColumnDefinition, .... altrimenti saranno semplicemente sovrapporsi l'un l'altro. – Goblin

+0

Vale la pena ricordare che devi usare 'ItemContainerStyle' per fare ciò. Non puoi semplicemente impostare 'Grid.Row' e' Grid.Column' in 'ItemTemplate' perché qualsiasi elemento generato da' ItemTemplate' è avvolto nel contenitore che 'ItemsControl' genera, e' Grid.Row 'e' Grid.Column' devono essere impostati su quel contenitore in modo che 'Grid' li veda. –

+0

Funziona bene, grazie. @Robert: Grazie per la spiegazione. Non sapevo nemmeno che Grid generasse contenitori ... –

Problemi correlati