积极答复者
在XAML中如何将DataGridComboBoxColumn列的ItemsSource属性绑定到DataContext?

问题
-
XAML如下:
<Grid Name="grid"> <DataGrid Name="dataGrid" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="部门名称" Binding="{Binding Path=DepName}" /> <DataGridComboBoxColumn x:Name="cmbCol" Header="负责人" ItemsSource="{Binding Path=Employees}" DisplayMemberPath="EmpName"/> </DataGrid.Columns> </DataGrid> </Grid>
在代码中将一个Department对象赋给了grid的DataContext属性,其中Department对象中的Employees属性是一个List<Employee>,部分代码如下:
public partial class MainWindow : Window
为什么在cmbCol列的下拉列表框中没有任何内容呢?绑定代码应该怎么写?
{public MainWindow() { InitializeComponent(); Department dep1 = new Department(); dep1.DepCode = "dep01"; dep1.DepName = "行政部"; dep1.Employees.Add(new Employee { EmpNo = "001", EmpName = "张三"}); dep1.Employees.Add(new Employee { EmpNo = "002", EmpName = "李四" }); dep1.Employees.Add(new Employee { EmpNo = "003", EmpName = "王五" }); grid.DataContext = dep1; dataGrid.ItemsSource = new Department[] { dep1 }; } } public class Employee { public string EmpNo { get; set;} public string EmpName { get; set; } } public class Department { public string DepCode { get; set; } public string DepName { get; set; } private List<Employee> employees = new List<Employee>(); public List<Employee> Employees { get { return employees; } } }
答案
-
你好。
DataGridComboBoxColumn对数据源有要求:静态资源、x: 静态代码实体或者ComboBoxItem 类型的内联集合。
我们可以通过设置DataGridComboBoxColumn的Style的方式来完成:
<DataGrid Name="dataGrid" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="部门名称" Binding="{Binding Path=DepName}" /> <DataGridComboBoxColumn Header="负责人" DisplayMemberPath="EmpName"> <DataGridComboBoxColumn.EditingElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource" Value="{Binding Path=Employees}" /> <Setter Property="SelectedValue" Value="{Binding Path=EmpNo}" /> </Style> </DataGridComboBoxColumn.EditingElementStyle> <DataGridComboBoxColumn.ElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource" Value="{Binding Path=Employees}" /> <Setter Property="SelectedValue" Value="{Binding Path=EmpNo}" /> <Setter Property="DisplayMemberPath" Value="EmpName"/> </Style> </DataGridComboBoxColumn.ElementStyle> </DataGridComboBoxColumn> </DataGrid.Columns> </DataGrid>
这样就能在下拉框中显示和选择内容了。
- 已编辑 shao.meng 2014年6月3日 9:54
- 已建议为答案 Leo (Apple) YangModerator 2014年6月4日 1:10
- 已标记为答案 seewold 2014年6月4日 6:03
全部回复
-
你好。
DataGridComboBoxColumn对数据源有要求:静态资源、x: 静态代码实体或者ComboBoxItem 类型的内联集合。
我们可以通过设置DataGridComboBoxColumn的Style的方式来完成:
<DataGrid Name="dataGrid" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="部门名称" Binding="{Binding Path=DepName}" /> <DataGridComboBoxColumn Header="负责人" DisplayMemberPath="EmpName"> <DataGridComboBoxColumn.EditingElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource" Value="{Binding Path=Employees}" /> <Setter Property="SelectedValue" Value="{Binding Path=EmpNo}" /> </Style> </DataGridComboBoxColumn.EditingElementStyle> <DataGridComboBoxColumn.ElementStyle> <Style TargetType="ComboBox"> <Setter Property="ItemsSource" Value="{Binding Path=Employees}" /> <Setter Property="SelectedValue" Value="{Binding Path=EmpNo}" /> <Setter Property="DisplayMemberPath" Value="EmpName"/> </Style> </DataGridComboBoxColumn.ElementStyle> </DataGridComboBoxColumn> </DataGrid.Columns> </DataGrid>
这样就能在下拉框中显示和选择内容了。
- 已编辑 shao.meng 2014年6月3日 9:54
- 已建议为答案 Leo (Apple) YangModerator 2014年6月4日 1:10
- 已标记为答案 seewold 2014年6月4日 6:03