Проблемы с привязкой WPF DataGridComboBoxColumn C # 4

#c# #wpf #datagridcomboboxcolumn

#c# #wpf #datagridcomboboxcolumn

Вопрос:

Я искал около 4 часов, поэтому, если ответ где-то здесь, я сожалею. В любом случае .. здесь идет:

У меня есть DataGrid и я пытаюсь реализовать DatGridComboBoxColumn. Я дошел до того, что смог заставить его выдавать правильные данные. Однако, когда я делаю выбор, он изменяет не только выбранный столбец, но и другой столбец в главной таблице.

В частности:

моя таблица групп выглядит следующим образом:
идентификатор, имя
1, A
2,B
3, C

Если я выбираю A в DataGridComboBoxColumn, это изменяет поле groupId в источнике данных расписаний на правильное значение, 1. Но — это также изменяет поле Name в источнике данных расписаний на «A». Я перепробовал около 70 различных комбинаций того, как устанавливать вещи. Единственное, что сработало, это переименовать поле Name в Schedules во что-то другое, например ScheduleName. Это какая-то ошибка в WPF или я что-то неправильно кодирую?

Любая помощь будет высоко оценена!
Орсон

Вот код страницы:

 <Page x:Class="Bix.SchedulesMainPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="565" d:DesignWidth="775"
    Title="SchedulesMainPage" xmlns:my="clr-namespace:Bix">
    <Page.Resources>
        <ObjectDataProvider x:Key="ScheduleDataProvider" ObjectType="{x:Type my:ScheduleDataProvider}"/>
        <ObjectDataProvider x:Key="Schedules"
          ObjectInstance="{StaticResource ScheduleDataProvider}"
          MethodName="GetSchedules"/>
        <ObjectDataProvider x:Key="GroupDataProvider" ObjectType="{x:Type my:GroupDataProvider}"/>
        <ObjectDataProvider x:Key="Groups"
          ObjectInstance="{StaticResource GroupDataProvider}"
          MethodName="GetGroups"/>
        <ObjectDataProvider x:Key="ReportDataProvider" ObjectType="{x:Type my:ReportDataProvider}"/>
        <ObjectDataProvider x:Key="Reports"
          ObjectInstance="{StaticResource ReportDataProvider}"
          MethodName="GetReports"/>
    </Page.Resources>
    <Grid>
        <Label Content="Schedules" FontSize="32" FontWeight="Bold" Foreground="#FF5A5A5A" Height="52" HorizontalAlignment="Left" Margin="10,10,0,0" Name="label1" VerticalAlignment="Top" Width="719" />
        <DataGrid AutoGenerateColumns="False" DataContext="{Binding Source={StaticResource Schedules}}" Height="224" HorizontalAlignment="Left" HorizontalGridLinesBrush="#FFCBCBCB" ItemsSource="{Binding}" Margin="12,68,0,0" Name="dgrdContacts" VerticalAlignment="Top" VerticalGridLinesBrush="#FFCBCBCB" Width="751">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Path=Name}" Header="Name" Width="120" />
                <DataGridComboBoxColumn Header="Contact Group"
                    SelectedValueBinding="{Binding Path=GroupId}" DisplayMemberPath="Name" SelectedValuePath="Id" ItemsSource="{Binding Source={StaticResource Groups}}">
                    <DataGridComboBoxColumn.ElementStyle>
                        <Style TargetType="ComboBox">
                            <Setter Property="ItemsSource" Value="{Binding Source={StaticResource Groups}}" />
                            <Setter Property="Text" Value="{Binding Name}" />
                        </Style>
                    </DataGridComboBoxColumn.ElementStyle>
                    <DataGridComboBoxColumn.EditingElementStyle>
                        <Style TargetType="ComboBox">
                            <Setter Property="ItemsSource" Value="{Binding Source={StaticResource Groups}}" />
                            <Setter Property="Text" Value="{Binding Name}" />
                        </Style>
                    </DataGridComboBoxColumn.EditingElementStyle>
                </DataGridComboBoxColumn>
                <DataGridTextColumn Binding="{Binding Path=Interval}" Header="Send Every" Width="120" />
                <DataGridTextColumn Binding="{Binding Path=IntervalUnit}" Header="Time Unit" Width="120" />
                <DataGridTextColumn Binding="{Binding Path=LastSend}" Header="Last Sent" Width="*" />
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Page>
  

Ответ №1:

Вы привязываете Text свойство ComboBox к Name свойству в базовой строке в источнике данных. Глядя на код, я не вижу никакой необходимости в EditingElementStyle ElementStyle стилях and , поскольку вы уже устанавливаете соответствующие свойства вне его.

Комментарии:

1. Спасибо. хорошее направление! правильные имена свойств: DisplayMemberPath и SelectedValuePath. Теперь это работает!