如何使用连接到不同 ItemSource 的 DataGridTemplateColumn 获取行值
本文关键字:DataGridTemplateColumn 获取 ItemSource 何使用 连接 | 更新日期: 2023-09-27 18:24:55
我正在使用WPF MVVM DataGrid,其中一列相当于DataGridComboBoxColumn,但由DataGridTemplateColumn组成。DataGrid 本身绑定到一个对象,ComboBox 列绑定到单独的对象。
XAML 代码为:
<DataGrid Grid.Column="0" AutoGenerateColumns="False" CanUserAddRows="False" ItemsSource="{Binding ItemNamesSetting}">
<DataGrid.Columns>
<DataGridTextColumn Header="Item1" Binding="{Binding Path=OriginalItemName}" />
<DataGridTextColumn Header="Item2" Binding="{Binding Path=FinalItemName}" />
<DataGridTemplateColumn Header="Attribute">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.AttributesBindingList, ElementName=ThirdStepTab}" DisplayMemberPath="PropName" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Item3" Binding="{Binding Path=Separatopr}" />
</DataGrid.Columns>
</DataGrid>
问题是如何获取整行数据?我计划有一个"保存"按钮将数据发送到数据库,我需要从不同的环境中获取文本列中的数据 + ComboBox 中的数据 - 逐行。有没有办法做到这一点?
谢谢。
您需要将 DataGrid
的 SelectedItem
属性绑定到 MVVM 视图模型。此外,视图模型的相关属性之一应绑定到组合框SelectedValue
<DataGrid Grid.Column="0" AutoGenerateColumns="False" CanUserAddRows="False" ItemsSource="{Binding ItemNamesSetting}" SelectedItem="{Binding VMPropertyName}" >
<DataGrid.Columns >
<DataGridTextColumn Header="Item1" Binding="{Binding Path=OriginalItemName}" />
<DataGridTextColumn Header="Item2" Binding="{Binding Path=FinalItemName}" />
<DataGridTemplateColumn Header="Attribute">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.AttributesBindingList, ElementName=ThirdStepTab}" DisplayMemberPath="PropName" SelectedValue="{Binding PropertyOfVM}" />
</DataTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Item3" Binding="{Binding Path=Separatopr}" />