1

ComboBoxColumn을 사용하여 데이터 테이블에 바인딩 된 DataGrid가 있습니다. 다음과 같이 컬럼의 XAML은 다음과 같습니다WPF DataGrid의 ComboBox 열과 ItemsSource로 DataTable

<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 속성이 처리 할 줄 알았는데 ... 내가 뭘 잘못하고있어? 해명


업데이트 :
데이터 격자가 직원 ID 열을 포함하는 데이터 테이블에 결합된다. 화면이로드 될 때 EmployeeID 1, 2 및 3이있는 테이블에 3 개의 행이 있다고 가정 해 봅시다. 첫 번째 행에 콤보 상자 열이 있어야 EmployeeID 1이 선택되고 두 번째 행에는 EmployeeID 2가 선택되고 세 번째 행에 EmployeeID 3이 선택되었습니다.

+0

궁금한 점은 실행시 출력 창에 데이터 바인딩 오류가 있습니까? –

+0

데이터 바인딩 오류가 없습니다 – drowned

답변

0

정확하게 문제를 이해하면 ComboBox은 기본적으로 컬렉션의 첫 번째 항목을 선택하지 않습니다?

이 경우 ComboBoxIsSychronizedWithCurrentItem 속성을 true로 설정해야합니다. Selector.IsSynchronizedWithCurrentItemhere에 대한 정보

...

음, 불행히도 추가 연구에, DataGridComboBoxColumnIsSynchronizedWithCurrentItem 속성이 없습니다. : 도움이

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

희망 : /, 당신은 다음과 같이 보입니다하는 DataGridTemplateColunm를 만들 수 있습니다!

+0

아니요, DataGrid에 직원이 표시됩니다 ... 각 행의 올바른 직원은 그리드가로드 될 때 콤보 상자 열에서 선택되어야합니다. – drowned

+0

나는 아직도 내가 잘 모르겠다. 이 질문이 귀하의 문제를 해결하는 것으로 보입니까 : http://stackoverflow.com/questions/5409259/binding-itemssource-of-a-comboboxcolumn-in-wpf-datagrid? –

+0

모든 직원의 목록이 드롭 다운에 표시되기 때문에 그 질문은 내 문제를 해결하지 못하는 것 같습니다. – drowned