Ich habe ein DataGrid innerhalb der ItemTemplate einer ListBox geschachtelt. Ich versuche, eine baumähnliche Datenstruktur damit anzuzeigen. Meine Klassen sind wie folgt. Das Objekt in meinem Datenkontext enthält ein List<Section>
namens Sections
, an das meine ListBox gebunden ist. Jede Section
enthält eine List<Item>
namens Items
, an die das DataGrid in eac ItemTemplate gebunden ist.Verschachteltes Datagrid in ListBox
Wenn ich die App ausführen, bekomme ich eine Null-Referenz Ausnahme von der XAML an der Zeile mit der Bindung. Gibt es einen besseren/alternativen Weg dies zu tun, oder fehlt mir ein Trick mit der Bindung?
<Window.Resources>
<CollectionViewSource x:Key="SectionSource" /><!-- this is initialized and filled with an ObservableCollection<Section> Sections when the window loads-->
</Window.Resources>
<ListBox x:Name="lstIngredients" ItemsSource="{Binding Source={StaticResource SectionSource}}">
<ListBox.ItemTemplate>
<DataTemplate>
<DataTemplate.Resources>
<CollectionViewSource x:Key="itemsSource" Source="{Binding Items}"/>
</DataTemplate.Resources>
<DataGrid x:Name="dgItems" IsReadOnly="false" AutoGenerateColumns="False" SelectionMode="Single" SelectionUnit="FullRow" IsSynchronizedWithCurrentItem="True"
DataContext="{Binding}"
ItemsSource="{Binding Source={StaticResource Items}}"
EnableRowVirtualization="false"
VirtualizingStackPanel.VirtualizationMode="Standard"
<DataGrid.Columns>
<DataGridTemplateColumn Width="2*" Header="{lex:LocText ChickenPing.Shared:Strings:Measurement}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock x:Name="quantity" Text="{Binding Measurement}" TextTrimming="CharacterEllipsis" TextAlignment="Left"/>
<!-- Null reference on this line caused by the binding. If I set this to any DependencyProperty on an Item object, I get a null reference-->
</DataTemplate>
gleichen Fehler leider. Für die TextBox-Textbindung habe ich '{Binding DataContext.MyProperty}' und '{Binding MyProperty}' versucht, aber beides funktioniert nicht. – Echilon
Beginnen wir mit der Sammlung. Setzen Sie ein Debug in das Get on "{Binding Path = PropertyThatIsCollection}" und stellen Sie sicher, dass die Auflistung aufgerufen wird. Dasselbe gilt für TextBlock Path =, da die Bindung relativ ist. Sie können PresentationTrace High verwenden, um mehr Bindungsfehler zu erhalten. – Paparazzi