ListBox内部的DataContext组合框绑定



我有一个显示List<Item> ItemsListBox,Item是一个自定义对象。对于每个项目,我希望用户看到一个ComboBoxList<string> Options作为源,所选项目绑定回项目的属性。在列表框中,我可以轻松绑定各个Item属性,但如何返回到DataContext以获取选项列表?

视图模型被设置为页面的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>

我试着去掉尽可能多的额外代码,得到一个可读的例子。

如何绑定到ListBox中与已指定的ItemsSource不同的源This使用不存在的AncestorType?

Listbox.ItemTemplate绑定问题中的ComboBox绑定到静态资源。我应该将我的选项放入静态资源中吗?

ElementName看起来很有前景,但我的IDE只推荐范围在ListBox内的元素不信任VISUAL STUDIO

我是不是搞错了?

试试这个:

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

您可以在组合框绑定对象上使用RelativeSource属性来查找父对象。像这样的东西应该工作

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

如果您使用的是Page或Window,请将UserControl替换为Page。

最新更新