Ho un conteggio arbitrario di ViewModels perdisplay e voglio che ViewModels sia visualizzato in due colonne. La prima colonna dovrebbe mostrare principalmente un nome / descrizione e il contenuto della seconda colonna varia. Preferirei a Grid
-come layout con un Width = "auto"
per la prima colonna e Width = "*"
per la seconda colonna.
Ho provato a ListView
con un GridView
ma questo ha alcuni difetti.
- Posso selezionare il
ListViewItem
s (non necessario) GridViewColumns
avere intestazioni (spazio sprecato / non necessario)GridViewColumns
non supportareWidth = "*"
come unGrid
e quindi non utilizza tutto lo spazio disponibile
Potrei usare a Grid
, ma che avrei dovuto aggiungere Grid.RowDefinitions
per ogni ViewModel e non sarebbe possibile impostare il Grid.Row
Proprietà tramite associazione.
Ho anche pensato di usare a StackPanel
, ma ciò non supporta Templating e non so come sincronizzare Width
per la prima colonna.
Quindi, qualcuno sa quale ItemControl
è più adatto a questo scopo?
risposte:
1 per risposta № 1Senza testarlo mi aspetterei un ItemsControlcon un modello di dati per essere una soluzione adatta. È possibile utilizzare Grid.IsSharedSizeScope = "true" su un elemento padre, in questo caso ItemsControl, quindi sincronizzare la larghezza della prima colonna utilizzando SharedSizeGroup = "somename".
<Grid>
<Grid.Resources>
<DataTemplate x:Key="itemTemplate" DataType="{x:Type MyItemType}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="column1" Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Title}"/>
<!-- More stuff here -->
</Grid>
</DataTemplate>
</Grid.Resources>
<ItemsControl Grid.IsSharedSizeScope="True" ItemTemplate="{StaticResource itemTemplate}" />
</Grid>
1 per risposta № 2
Vorrei utilizzare un ListBox con una griglia come modello come questo:
<ListBox ItemsSource="{Binding SomeData}" HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Data1}" Grid.Column="0"></TextBlock>
<TextBlock Text="{Binding Data1}" Grid.Column="1"></TextBlock>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>