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。
我目前正在为 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。