Ich habe eine ListBox
, die eine List<Item> Items
mit Item angezeigt wird, ein benutzerdefiniertes Objekt. Foreach item Ich möchte, dass der Benutzer eine ComboBox
mit List<string> Options
als Quelle sieht, wobei das ausgewählte Objekt an eine Eigenschaft eines Elements gebunden wird. In der Listbox habe ich keine Probleme, die einzelnen Item-Eigenschaften zu binden, aber wie erreiche ich wieder den DataContext, um meine Liste der Optionen zu erhalten?DataContext ComboBox Bindung innerhalb der ListBox
Ansicht Modell wird als die Datacontext-Seite gesetzt
class ViewModel
{
public ObservableCollection<string> Options { get; set; }
public ObservableCollection<Item> Items { get; set; }
}
XAML
<ListBox x:Name="ItemsListBox" ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Height="50" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="ItemProperty1TB"
Text="{Binding Path=Property1, Mode=OneWay}"
Grid.Column="0"
/>
<ComboBox x:Name="OptionsCB"
SelectedItem ="{Binding ChosenOptions, Mode=TwoWay}"
ItemsSource="{Binding Path=DataContext.Options}"
Grid.Column="1"
PlaceholderText="Option"
/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Ich habe versucht, so viel zusätzlichen Code auszuschneiden und zu einem lesbaren Beispiel zu erhalten.
How to bind to a source inside a ListBox different from the ItemsSource already specified Dies verwendet AncestorType, die nicht existiert?
ComboBox inside Listbox.ItemTemplate Binding problem Dies bindet an eine statische Ressource. Sollte ich meine Optionen in eine statische Ressource legen?
ElementName
sieht vielversprechend aus, aber meine IDE empfiehlt nur Elemente in das Innere des ListBox scoped ... NICHT VISUAL STUDIO TRUST
Bin ich gerade dies alles falsch gehen über?
Ansichtsmodell muss Eigenschaften haben, keine Felder. Ist das der eigentliche Code? –
Nein, das ist nicht der eigentliche Code, den ich so schnell ändern werde – JaredStroeb
Versuch 'ItemsSource =" {Binding Path = DataContext.Options, ElementName = ItemsListBox} "' –