【问题标题】:ComboBox column in WPF DataGrid with DataTable as ItemsSourceWPF DataGrid 中的 ComboBox 列,DataTable 为 ItemsSource
【发布时间】:2011-08-23 11:40:47
【问题描述】:

我有一个绑定到数据表的数据网格,带有一个 ComboBoxColumn。此列的 XAML 如下:

<DataGridComboBoxColumn Header="Rep Name" SortMemberPath="RepName" 
                      ItemsSource="{Binding UpdateSourceTrigger=PropertyChanged, Source={StaticResource EmployeeList}, Path=Employees}"
                      SelectedValueBinding="{Binding Mode=TwoWay, Path=EmpId}"
                      SelectedValuePath="EmpId" DisplayMemberPath="RepName" />


我的员工类:

public class EmployeeList : INotifyPropertyChanged
    {
        private ObservableCollection<Employee> _employees = new ObservableCollection<Employee>();

        public EmployeeList()
        {
           ...
        }

        public ObservableCollection<Employee> Employees
        {
            get { return _employees; }
            set { _employees = value; NotifyPropertyChanged("Employees"); }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        public void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

    public class Employee : INotifyPropertyChanged
    {
        private int _id;
        public int EmpId
        {
            get { return _id; }
            set { _id = value; OnPropertyChanged("EmpId"); }
        }

        public string RepName { get; set; }

        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
                PropertyChanged(this,
                    new System.ComponentModel.PropertyChangedEventArgs(propertyName));
        }
    }


作为网格项目源的 DataTable 包含一个“EmpId”列和一个“RepName”列。组合框填充了我所有的员工,当我做出选择时,它会反映在数据表中。但是,当屏幕加载时,默认情况下不会在组合框中选择当前分配的员工。我以为组合框的 SelectedValueBinding 属性会处理这个问题……我做错了什么?


更新说明:
数据网格绑定到包含 EmployeeID 列的数据表。假设当屏幕加载时,表中有 EmployeeID 为 1、2 和 3 的三行。我需要第一行中的组合框列选择 EmployeeID 1,第二行选择 EmployeeID 2,并且第三行选择了 EmployeeID 3。

【问题讨论】:

  • 只是好奇,运行时输出窗口有没有数据绑定错误?

标签: wpf datagrid binding selectedvalue datagridcomboboxcolumn


【解决方案1】:

如果我正确理解您的问题,ComboBox 默认不会选择集合中的第一项?

如果是这种情况,您应该将ComboBox 上的属性IsSychronizedWithCurrentItem 设置为true。关于Selector.IsSynchronizedWithCurrentItemhere的信息。

...

不幸的是,经过进一步研究,DataGridComboBoxColumn 没有IsSynchronizedWithCurrentItem 属性。 :/ 但是,您可以创建一个看起来像这样的DataGridTemplateColunm

<DataGridTemplateColumn Header="Rep Name">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="{Binding Employees}" 
                   IsSynchronizedWithCurrentItem="true" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColunm>

希望有帮助!

【讨论】:

  • 不,数据网格正在显示员工...当网格加载时,应在组合框列中为每一行选择正确的员工。
  • 我仍然不太确定我是否跟随。这个问题似乎解决了您的问题:stackoverflow.com/questions/5409259/…
  • 更新了初始帖子以尝试澄清......这个问题似乎没有解决我的问题,因为所有员工的列表确实显示在下拉列表中。
猜你喜欢
  • 2011-09-01
  • 2013-06-30
  • 2020-01-30
  • 1970-01-01
  • 2014-06-23
  • 2021-04-02
  • 2011-04-22
  • 2015-10-06
  • 1970-01-01
相关资源
最近更新 更多