I have a WPF DataGrid
bound to ObservableCollection
. Each item in my collection has Property which is a List<someObject>
. In my row details pane, I would like to write out formatted text blocks for each item in this collection. The end result would be something equivalent to:
<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>
and so on 0-n times.
I've tried using ItemsControl
for this:
<ItemsControl ItemsSource="{Binding Path=Exchanges}"> <DataTemplate> <Label>test</Label> </DataTemplate> </ItemsControl>
however, this appears to be only meant for more static sources, as it throws the following exception (collection is not altered after creation):
ItemsControl Operation is not valid while ItemsSource is in use. Access and modify elements with ItemsControl.ItemsSource instead*
Is there another way to achieve this?
What you did by specifying <DataTemplate .../>
inside of ItemsControl
is you added this instance of DataTemplate
to default property of ItemsControl
which is Items
. So the exception you got is the expected result: first you specify the ItemsSource
, then you modify Items
. Instead you should modify ItemTemplate
property on your ItemsControl
like so:
<ItemsControl ItemsSource="{Binding Path=Exchanges}"> <ItemsControl.ItemTemplate> <DataTemplate> <Label>test</Label> </DataTemplate> </ItemsControl.ItemTemplate> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal"/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> </ItemsControl>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With