ListBox 内部的 DataContext ComboBox 绑定
DataContext ComboBox Binding inside of ListBox
我有一个 ListBox
,它显示一个 List<Item> Items
,其中 Item 是一个自定义对象。对于每个项目,我希望用户看到一个 ComboBox
和 List<string> Options
作为源,所选 Item 与 Item 上的 属性 相关联。在列表框中,我可以轻松绑定各个 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>
我试图删除尽可能多的额外代码并得到一个可读的示例。
这使用了不存在的 AncestorType?
ComboBox inside Listbox.ItemTemplate Binding problem 这绑定到静态资源。我应该将选项放入静态资源吗?
ElementName
看起来很有希望,但我的 IDE 只推荐范围在列表框内的元素... 不要相信 VISUAL STUDIO
我是不是做错了?
您可以在 Combobox 绑定对象上使用 RelativeSource 属性 来查找父项。这样的东西应该可以工作
ItemsSource="{Binding Path=DataContext.Options, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
如果您使用的是 Page 或 Window,请将 UserControl 替换为 Page。
试试这个:
ItemsSource="{Binding Path=DataContext.Options, ElementName=ItemsListBox}"
我有一个 ListBox
,它显示一个 List<Item> Items
,其中 Item 是一个自定义对象。对于每个项目,我希望用户看到一个 ComboBox
和 List<string> Options
作为源,所选 Item 与 Item 上的 属性 相关联。在列表框中,我可以轻松绑定各个 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>
我试图删除尽可能多的额外代码并得到一个可读的示例。
ComboBox inside Listbox.ItemTemplate Binding problem 这绑定到静态资源。我应该将选项放入静态资源吗?
ElementName
看起来很有希望,但我的 IDE 只推荐范围在列表框内的元素... 不要相信 VISUAL STUDIO
我是不是做错了?
您可以在 Combobox 绑定对象上使用 RelativeSource 属性 来查找父项。这样的东西应该可以工作
ItemsSource="{Binding Path=DataContext.Options, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
如果您使用的是 Page 或 Window,请将 UserControl 替换为 Page。
试试这个:
ItemsSource="{Binding Path=DataContext.Options, ElementName=ItemsListBox}"