WPF DataGrid中的ComboBox列,DataTable为ItemsSource

时间:2011-05-11 16:39:37

标签: wpf datagrid binding selectedvalue datagridcomboboxcolumn

我有一个绑定到数据表的数据网格,带有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属性会处理这个......我做错了什么?


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

1 个答案:

答案 0 :(得分:0)

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

如果是这种情况,您应该将IsSychronizedWithCurrentItem上的属性ComboBox设置为true。有关Selector.IsSynchronizedWithCurrentItem here

的信息

...

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

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

希望有所帮助!

相关问题