2017-01-20 2 views
0

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?

+0

Ansichtsmodell muss Eigenschaften haben, keine Felder. Ist das der eigentliche Code? –

+0

Nein, das ist nicht der eigentliche Code, den ich so schnell ändern werde – JaredStroeb

+1

Versuch 'ItemsSource =" {Binding Path = DataContext.Options, ElementName = ItemsListBox} "' –

Antwort

0

Versuchen Sie folgendes:

ItemsSource="{Binding Path=DataContext.Options, ElementName=ItemsListBox}" 
0

Sie können die RelativeSource-Eigenschaft für das Combobox-Bindungsobjekt verwenden, um das übergeordnete Objekt zu finden. So etwas sollte funktionieren

Ersetzen Sie UserControl mit Page, wenn Sie Seite oder Fenster für diese Angelegenheit verwenden.

+0

Diese Methode scheint in WPF, aber nicht in Windows Phone zu funktionieren. – JaredStroeb

+0

OK Ich bin mir nicht sicher über Windows Phone, aber Sie können ElementName auf Ihrem Eltern verwenden, wenn das in wp funktioniert. –