2011-05-11 82 views
1

我有一個DataGrid綁定到一個數據表,ComboBoxColumn。此列的XAML如下:WPF DataGrid中的ComboBox列與DataTable作爲ItemsSource

<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)); 
     } 
    } 


的數據表服務作爲項目源網格包含「EMPID」列和「RepName」列。組合框與我的所有員工一起填充,當我做出選擇時,它會反映在數據表中。但是,當屏幕加載時,組合框中默認未選擇當前分配的員工。我認爲組合框的SelectedValueBinding屬性會處理這個......我做錯了什麼?


更新澄清:
數據網格被綁定到一個數據表,它包括一個僱員柱。我們假設當屏幕加載時,表中有三行,EmployeeID爲1,2和3.我需要第一行中的組合框列選擇EmployeeID 1,第二行選擇EmployeeID 2,以及第三行選擇EmployeeID 3。

+0

只是好奇,運行時輸出窗口中是否有任何數據綁定錯誤? – 2011-05-11 18:09:55

+0

沒有數據綁定錯誤 – drowned 2011-05-11 20:45:34

回答

0

如果我正確理解您的問題,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> 

希望幫助!

+0

不,數據網格正在顯示員工...當網格加載時,應該在組合框中選擇每行的正確員工。 – drowned 2011-05-11 17:49:47

+0

我仍然不太確定我是否遵循。這個問題似乎解決您的問題:http://stackoverflow.com/questions/5409259/binding-itemssource-of-a-comboboxcolumn-in-wpf-datagrid? – 2011-05-11 18:18:00

+0

更新了初始文章,試圖澄清......該問題似乎沒有解決我的問題,因爲所有員工的列表確實顯示在下拉列表中。 – drowned 2011-05-11 19:14:34