c# - tipos - ¿Control de repetidor WPF(como) para la fuente de recolección?
tecnicas de recopilacion de informacion (1)
Tengo un DataGrid
WPF vinculado a ObservableCollection
. Cada elemento de mi colección tiene una propiedad que es una List<someObject>
. En el panel de detalles de mi fila, me gustaría escribir bloques de texto con formato para cada elemento de esta colección. El resultado final sería algo equivalente a:
<TextBlock Style="{StaticResource NBBOTextBlockStyle}" HorizontalAlignment="Right">
<TextBlock.Inlines>
<Run FontWeight="Bold" Text="{Binding Path=Exchanges[0].Name}" />
<Run FontWeight="Bold" Text="{Binding Path=Exchanges[0].Price}" />
<LineBreak />
<Run Foreground="LightGray" Text="{Binding Path=Exchanges[0].Quantity}" />
</TextBlock.Inlines>
</TextBlock>
<TextBlock Style="{StaticResource NBBOTextBlockStyle}">
<TextBlock.Inlines>
<Run FontWeight="Bold" Text="{Binding Path=Exchanges[1].Name}" />
<Run FontWeight="Bold" Text="{Binding Path=Exchanges[1].Price}" />
<LineBreak />
<Run Foreground="LightGray" Text="{Binding Path=Exchanges[1].Quantity}" />
</TextBlock.Inlines>
</TextBlock>
y así sucesivamente 0-n veces.
He intentado usar ItemsControl
para esto:
<ItemsControl ItemsSource="{Binding Path=Exchanges}">
<DataTemplate>
<Label>test</Label>
</DataTemplate>
</ItemsControl>
sin embargo, esto parece ser solo para fuentes más estáticas, ya que produce la siguiente excepción (la colección no se altera después de la creación):
La operación ItemsControl no es válida mientras ItemsSource está en uso. Acceda y modifique los elementos con ItemsControl.ItemsSource en su lugar *
¿Hay otra manera de lograr esto?
Lo que hizo al especificar <DataTemplate .../>
dentro de ItemsControl
es que agregó esta instancia de DataTemplate
a la propiedad predeterminada de ItemsControl
que es Items
. Entonces, la excepción que obtuvo es el resultado esperado: primero especifique el ItemsSource
y luego modifique los Items
. En su lugar, debe modificar la propiedad ItemTemplate
en su ItemsControl
la ItemsControl
manera:
<ItemsControl ItemsSource="{Binding Path=Exchanges}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label>test</Label>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>