C# 如何从ObservableCollection内部的属性列表中填充DataGridComboxColumn?MVVM

C# 如何从ObservableCollection内部的属性列表中填充DataGridComboxColumn?MVVM,c#,wpf,mvvm,datagrid,datagridcomboboxcolumn,C#,Wpf,Mvvm,Datagrid,Datagridcomboboxcolumn,我的视图模型类中有一个属性ObservableCollection SomeEmployee: private ObservableCollection<Employee> someEmployee=new ObservableCollection<Employee>(); public ObservableCollection<Employee> SomeEmployee { get {return someEmployee;} set {

我的视图模型类中有一个属性ObservableCollection SomeEmployee:

private ObservableCollection<Employee> someEmployee=new ObservableCollection<Employee>();
public ObservableCollection<Employee> SomeEmployee 
{
 get {return someEmployee;}
  set { 
       someEmployee=value;
       OnPropertyChanged("SomeEmployee");
}
SomeEmployee由PopulateObject方法填充

public static IEnumerable<Employee> PopulateObject()
    {
        IEnumerable<Employee> list = new List<Employee>() 
        {
             new Employee { EmployeeName = "Bob", EmployeeID=1,
                  ListOfEmployees=new List<Employee>(){
                      new Employee(){EmployeeName="Gigi"}, 
                      new Employee(){EmployeeName="Bacconi"} 
                      new Employee(){EmployeeName="Teodor"} }
                          },
             new Employee { EmployeeName = "John", EmployeeID=2, },
             new Employee { EmployeeName = "Adam", EmployeeID=3, }, 
        };
        return list;
    }
Employee类有一个Employees属性列表,我想在DataGrid的DataGridComboBox列中显示:

public class Employee 
{
   public int? EmployeeID {get; set;}
   public string EmployeeName {get; set;}
   public List<Employee> ListOfEmployees {get; set;}
<DataGrid ItemsSource="{SomeEmployee}">
 <DataGrid.Columns>
     <DataGridComboBoxColumn Header="ComboBox" SelectedItemBinding="{Binding EmployeeName}">
      <DataGridComboBoxColumn.ElementStyle>
  <Style TargetType="ComboBox">
     <Setter Property="ItemsSource" Value="Binding Path=DataContext.ListOfEmployees}"/>
  </Style>
   </DataGridComboBoxColumn.ElementStyle>
  </DataGridComboBoxColumn>
   </DataGrid.Columns>
   </DataGrid>
我的数据网格:

public class Employee 
{
   public int? EmployeeID {get; set;}
   public string EmployeeName {get; set;}
   public List<Employee> ListOfEmployees {get; set;}
<DataGrid ItemsSource="{SomeEmployee}">
 <DataGrid.Columns>
     <DataGridComboBoxColumn Header="ComboBox" SelectedItemBinding="{Binding EmployeeName}">
      <DataGridComboBoxColumn.ElementStyle>
  <Style TargetType="ComboBox">
     <Setter Property="ItemsSource" Value="Binding Path=DataContext.ListOfEmployees}"/>
  </Style>
   </DataGridComboBoxColumn.ElementStyle>
  </DataGridComboBoxColumn>
   </DataGrid.Columns>
   </DataGrid>
然而,第一个组合框并没有显示,它就像显示简单的DataGridTextColumn一样。第二,单元格中没有数据


如何从ObservableCollection内部的属性列表填充DataGridComboxColumn?我做错了什么?非常感谢您的帮助。

您不需要将ItemsSource设置为style,您可以执行以下操作:

 <DataGrid ItemsSource="{SomeEmployee}">
   <DataGrid.Columns>
     <DataGridComboBoxColumn Header="ComboBox" SelectedItemBinding=" {Binding EmployeeName}" ItemSource="{Binding EmployeeID}">
     </DataGridComboBoxColumn>
   </DataGrid.Columns>
 </DataGrid>
ListOfEmployees在您的模型中不存在,我想您希望绑定到EmployeeID的表达式

ObservableCollection<Employee> SomeEmployee =
    new ObservableCollection<Employee>(PopulateObject());

您的网格是否处于只读模式?您必须进入编辑模式,这样组合框才能显示。我已经尝试了所有变量IsReadOnly=True和IsReadOnly=False。但是,没有组合框。我在测试应用程序中使用了你的代码,效果很好。如果在单元格中单击两次,组合框将显示。很抱歉,我无法进一步帮助。因此要绑定DataGridComboxColumn,我需要创建一个新属性?不,您必须将字段SomeEmployee转换为属性。好的,我已将字段SomeEmployee转换为属性,但是,我在DataGridComboxColumn中看不到任何项目。您是否也将窗口的DataContext设置为视图模型的实例?另外,不要忘记通过调用PopulateObject方法来填充SomeEmployee集合。我已经相应地编辑了答案。是的,我已经完成了你所说的,但是我在DataGridComboBox中看不到任何填充的数据?甚至DataGridComboBox也没有出现在我的DataGrid中。我不知道我做错了什么。
<DataGrid ItemsSource="{Binding SomeEmployee}">
DataContext = new ViewModel();