2017-01-20 6 views
0

У меня есть ListBox, который отображает List<Item> Items с элементом, являющимся обычным объектом. Элемент Foreach Я хочу, чтобы пользователь увидел ComboBox с List<string> Options в качестве источника с выбранным элементом, возвращающим свойство объекта. В окне списка я не имею никаких проблем с привязкой к отдельным свойствам Item, но как мне вернуться в DataContext, чтобы получить список моих опций?DataContext ComboBox Связывание внутри ListBox

View Модель задается как DataContext страницы в

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> 

Я попытался вырезать столько, сколько дополнительный код и получить читаемый пример.

How to bind to a source inside a ListBox different from the ItemsSource already specified Это использует AncestorType, который не существует?

ComboBox inside Listbox.ItemTemplate Binding problem Это связывает статический ресурс. Должен ли я помещать свои параметры в статический ресурс?

ElementName выглядит многообещающим, но мой IDE рекомендует только элементы области видимости внутри ListBox ... НЕ ВЕРЬТЕ Visual Studio

я просто буду об этом все неправильно?

+0

ViewModel должна иметь свойства, а не поля. Это реальный код? –

+0

Нет, это не тот код, который я так быстро изменил. – JaredStroeb

+1

Попробуйте 'ItemsSource =" {Binding Path = DataContext.Options, ElementName = ItemsListBox} "' –

ответ

0

Попробуйте это:

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

Свойство RelativeSource для объекта привязки Combobox можно найти, чтобы найти родителя. Что-то вроде этого должно работать

ItemsSource="{Binding Path=DataContext.Options, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" 

Замените UserControl на страницу, если вы используете страницу или окно, если на то пошло.

+0

Этот метод работает в WPF, но не в телефоне Windows. – JaredStroeb

+0

OK Я не уверен в телефоне Windows, но вы можете использовать ElementName у своего родителя, если это работает в wp. –