C# 如何从ObservableCollection内部的属性列表中填充DataGridComboxColumn?MVVM
我的视图模型类中有一个属性ObservableCollection SomeEmployee: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 {
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();