我有一个 DataGrid,其中 ItemsSource 绑定到 ObservableCollection
<DataGrid ItemsSource="{Binding Items}">
ObservableCollection 中的每个项目也有一个 ObservableCollection 字符串。
其中一列是包含 ComboBox 的 DataGridTemplateColumn。我希望每一行的 ComboBox 包含该行 ViewModel 中字符串的 ObservableCollection 中的项目。如果我正常绑定它,这是可行的。但是,如果我使用的是 CompositeCollection,我似乎无法让它工作。
<DataGridTemplateColumn Header="Column Title">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox SelectedValue="{Binding Selected, UpdateSourceTrigger=PropertyChanged}">
<ComboBox.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{Binding ???}" />
<ComboBoxItem>
<TextBlock>
<Hyperlink Command="{Binding DataContext.EditList, Source={x:Reference myGridName}}">Edit List</Hyperlink>
</TextBlock>
</ComboBoxItem>
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
我不确定要使用什么来让 Binding 正常工作。没有 CompositeCollection,我可以简单地做:
<ComboBox ItemsSource="{Binding SubItems}">
在搜索中,我知道您需要为 CollectionContainer 设置一个源,但大多数示例是将其设置为对所有行都相同的静态列表。我需要将每一行绑定到该行的 ViewModel 中的 ObservableCollection。
我试过了:
<CollectionContainer Collection="{Binding DataContext.SubItems, RelativeSource={RelativeSource AncestorType=ComboBox}}" />
但这会导致以下错误:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ComboBox', AncestorLevel='1'' ...