【问题标题】:Problems binding WPF DataGridComboBoxColumn C# 4绑定 WPF DataGridComboBoxColumn C# 4 的问题
【发布时间】:2011-10-16 18:54:44
【问题描述】:

已经环顾了大约 4 个小时,所以如果答案在这里,我很抱歉。 无论如何..这里是:

我有一个 DataGrid,并且正在尝试实现一个 DatGridComboBoxColumn。 我已经设法让它提供正确的数据。但是,当我进行选择时,它不仅会更改所选列,还会更改主表中的另一列。

具体来说:

我的组表如下所示:
身份证、姓名
1,A
2,B
3,C

如果我在 DataGridComboBoxColumn 中选择 A,它会将 Schedules DataSource 中的 GroupId 字段更改为正确的值 1。 但是 - 它还会将 Schedules DataSource 中的 Name 字段更改为“A”。 我已经尝试了大约 70 种不同的设置方式组合。 唯一可以将 Schedules 中的 Name 字段重命名为 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>

【问题讨论】:

    标签: c# wpf datagridcomboboxcolumn


    【解决方案1】:

    您将ComboBoxText 属性绑定到数据源中基础行的Name 属性。查看代码,我认为不需要 EditingElementStyleElementStyle 样式,因为您已经在它之外设置了相关属性。

    【讨论】:

    • 谢谢。好方向!正确的属性名称是:DisplayMemberPath 和 SelectedValuePath。现在可以了!
    猜你喜欢
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 2011-04-10
    • 2011-07-27
    • 2017-08-05
    相关资源
    最近更新 更多