DataGridComboBoxColumn 和 2 个独立的集合

DataGridComboBoxColumn and 2 separate collections

我目前正在为 WPF MVVM 中的 DataGrid 而苦恼

我拥有的是绑定到一个集合的 DataGrid。它按预期显示在 DataGridTextColumn 中并填充 DataGrid。假设我有 10 件物品。但我还需要在每一行中有一个 DataGridComboBoxColumn,它将绑定到单独的集合。它应该包含自己的价值观,对第一个系列没有态度。使用该 DataGrid 用户将确定逻辑上未连接的 2 个集合之间的绑定。

XAML代码是:

<DataGrid Grid.Column="0" AutoGenerateColumns="False" CanUserAddRows="False" 
            ItemsSource="{Binding Path=ItemNamesSetting}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Initial Name item" Binding="{Binding Path=OriginalItemName}" />
        <DataGridTextColumn Header="Final Name item" Binding="{Binding Path=FinalItemName}" />
        <DataGridComboBoxColumn Header="Belongs to" Width="*" 
                                ItemsSource="{Binding Path=AttributesBindingList}"
                                DisplayMemberPath="PropName"/>
    </DataGrid.Columns>
</DataGrid>

尽管它在 ComboBox 中显示空行。我见过多个示例,它们使用 DataGridComboBoxColumn 绑定到数据,通过一些外部键在集合之间连接。但是我有 2 个不同的集合,它们没有关联。

你能看看我这个绑定哪里错了吗?

DataGridComboBoxColumn 的 DataContext 是 ItemNamesSetting 实例(您对 DataGridTextColumns 使用 OriginalItemName 和 FinalItemName),因此要在 DataGridComboBoxColumn 中使用 AttributesBindingList,您需要更改它的 DataContext,例如使用 ElementName 属性:

<Grid DataContext="{Binding MainVM}" Name="MainGrid">
    <DataGrid ItemsSource="{Binding SomeCollection}">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Name}"/>
            <DataGridComboBoxColumn ItemsSource="{Binding DataContext.ComboBoxCollection, ElementName=MainGrid}" />
        </DataGrid.Columns>
    </DataGrid>
</Grid>

在示例中,我创建了 VM (MainVM) 作为 Grid 的 DataContext。我们有两个属性 - SomeCollection 和 ComboBoxCollection,但 DataGridComboBoxColumn 使用 MainGrid 中的 DataContext。