我正在尝试在数据网格中创建一个组合框。到目前为止,我有这个组合框的两个版本,并没有一个按预期工作。
以下代码可以保存datagrid中的更改但无法加载该值(稍后称为V1)
<DataGridComboBoxColumn Header="Direction" Width="*">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="DisplayMemberPath" Value="Name"/>
<Setter Property="SelectedValuePath" Value="Type"/>
<Setter Property="SelectedValue" Value="{Binding dt}"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.paramDirection}"/>
<Setter Property="DisplayMemberPath" Value="Name"/>
<Setter Property="SelectedItem" Value="{Binding dt}"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
以下代码可以加载值但无法保存(以后称为V2)
<DataGridTemplateColumn Header="ColumnHeader">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding dt.Name}" IsEnabled="False"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox x:Name="cmbbx" ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.paramDirection}" DisplayMemberPath="Name" SelectedItem="{Binding dt}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
我通过事件命令功能访问组合框中的值
currentCellValue =(((ComboBox)e.EditingElement).SelectedItem);
这条线在V1上工作正常但不是V2。所以我想知道是否有办法从DataGridTemplateColumn中获取'SelectedItem'信息(如果是这样,如果不是,那么替代方案是什么)。
任何帮助将不胜感激。
设置列本身的DisplayMemberPath
,SelectedValuePath
和SelectedValueBinding
属性:
<DataGridComboBoxColumn Header="Direction" Width="*" DisplayMemberPath="Name" SelectedValuePath="Type" SelectedValueBinding="{Binding dt}">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.paramDirection}"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.paramDirection}"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
<ObjectDataProvider x:Key="Dir" MethodName="GetValues" ObjectType="{x:Type system:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type Type="pDIR:ParameterDirection"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
将我的选项设置为staticResource并绑定到Direction
<DataGridComboBoxColumn Width="*" Header="Direction" SelectedItemBinding="{Binding Direction}" ItemsSource="{Binding Source={StaticResource Dir}}"/>
最终工作,它增加了开销,但......