如何从DataGridTemplateColumn中获取所选项目信息

问题描述 投票:0回答:2

我正在尝试在数据网格中创建一个组合框。到目前为止,我有这个组合框的两个版本,并没有一个按预期工作。

以下代码可以保存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'信息(如果是这样,如果不是,那么替代方案是什么)。

任何帮助将不胜感激。

c# wpf mvvm data-binding wpfdatagrid
2个回答
0
投票

设置列本身的DisplayMemberPathSelectedValuePathSelectedValueBinding属性:

<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>

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}}"/>

最终工作,它增加了开销,但......

© www.soinside.com 2019 - 2024. All rights reserved.