我正在尝试在数据网格中创建一个组合框。到目前为止,我有此组合框的两个版本,但两个都没有按要求工作。
以下代码可以将更改保存在数据网格中,但无法加载该值(以后称为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”信息(如果可以的话,如何以及是否可以替代)。
任何帮助将不胜感激。
答案 0 :(得分:0)
设置列本身的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>
答案 1 :(得分:0)
<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}}"/>
最终有效,它增加了开销,但是...