WPF - DataTemplate sem um recipiente, itens como linhas em uma grade?
Pergunta
Existe um mecanismo equivalente ao ItemsControl.ItemTemplate
que funciona com um Grid
? Eu tenho uma coleção de itens e eu gostaria de apresentá-los como linhas em um Grid
para que eu possa atribuir Grid.Column
aos elementos individuais dentro do modelo (ao contrário de linhas em um controle de lista). Isso é possível no WPF usando controles padrão?
Solução
Ok, usar um ItemsControl com o Grid.IsSharedSizeScope="true"
propriedade anexada aplicada. Em seguida, para o seu seu ItemTemplate, você usa um <Grid>
apenas como faria normalmente, exceto agora, quando você adicionar ColumnDefinition
s você definir o atributo SharedSizeGroup
para um nome que é único para cada coluna. Assim, por exemplo:
<ItemsControl Grid.IsSharedSizeScope="true">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="MyFirstColumn" />
<ColumnDefinition SharedSizeGroup="MySecondColumn" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding MyFirstProperty}"/ >
<TextBlock Grid.Column="1" Text="{Binding MySecondProperty}"/ >
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Para saber mais sobre IsSharedSizeScope e SharedSizeGroup, cheque esta seção do SDK . Deve-se notar que RowDefinitions também têm um SharedSizeGroup de modo que você poderia fazer layouts horizontais também.
Outras dicas
Talvez eu não entendi o seu problema, mas não é exatamente o que um GridView faz?