Как получить информацию о выбранном элементе из DataGridTemplateColumn - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь создать комбинированный список в сетке данных. Пока у меня есть две версии этого списка, и ни одна из них не работает так, как хотелось бы.

Следующий код может сохранить изменения в сетке данных, но не может загрузить значение (далее упоминается как 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. Поэтому я хочу знать, есть ли способ получить информацию «SelectedItem» из DataGridTemplateColumn (если да, то как, а если нет, каковы альтернативы).

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 25 марта 2019
<ObjectDataProvider x:Key="Dir" MethodName="GetValues" ObjectType="{x:Type system:Enum}">
        <ObjectDataProvider.MethodParameters>
            <x:Type Type="pDIR:ParameterDirection"/>
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>

Установка параметров в качестве статического ресурса и привязка к направлению

<DataGridComboBoxColumn Width="*" Header="Direction" SelectedItemBinding="{Binding Direction}" ItemsSource="{Binding Source={StaticResource Dir}}"/>

ультимативно сработало, добавилось накладных расходов, но ...

0 голосов
/ 22 марта 2019

Установите свойства 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>
...