C# DataGrid组合框SelectedValue
我编写了一个简单的示例,其中WPF表单上的C# DataGrid组合框SelectedValue,c#,wpf,combobox,datatable,datagrid,C#,Wpf,Combobox,Datatable,Datagrid,我编写了一个简单的示例,其中WPF表单上的DataGrid完全从codebehind填充。带有组合框的DataGridTemplateColumn将ItemsSource设置为DummyClass,其中包含DisplayMember和SelectedValue的两个属性 数据表由一个列和两个行填充。DataGrid的ItemsSource设置为DataTable的默认视图 代码运行时,数据网格中的每个组合框都会正确显示,并且在下拉列表中有适当的选项,但不会显示数据表中的值 将组合框Selecte
DataGrid
完全从codebehind填充。带有组合框的DataGridTemplateColumn
将ItemsSource
设置为DummyClass
,其中包含DisplayMember
和SelectedValue
的两个属性
数据表
由一个列
和两个行
填充。DataGrid
的ItemsSource
设置为DataTable
的默认视图
代码运行时,数据网格
中的每个组合框
都会正确显示,并且在下拉列表中有适当的选项
,但不会显示数据表
中的值
将组合框
SelectedValue
连接到数据表
中的值时,我缺少什么绑定
public partial class MainWindow : Window
{
public class DummyClass
{
public int SelectedValue { get; set; }
public string DisplayValue { get; set; }
}
public ObservableCollection<DummyClass> DummyClassCollection;
public MainWindow()
{
InitializeComponent();
DummyClassCollection = new ObservableCollection<DummyClass>();
DummyClassCollection.Add(new DummyClass() { DisplayValue = "Item1", SelectedValue = 0 });
DummyClassCollection.Add(new DummyClass() { DisplayValue = "Item2", SelectedValue = 1 });
DummyClassCollection.Add(new DummyClass() { DisplayValue = "Item3", SelectedValue = 2 });
DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
DataTemplate dataTemplate = new DataTemplate();
FrameworkElementFactory control = new FrameworkElementFactory(typeof(ComboBox));
control.SetValue(ComboBox.ItemsSourceProperty, DummyClassCollection);
control.SetValue(ComboBox.DisplayMemberPathProperty, "DisplayValue");
//
//Some binding to connect ComboBox Selectedvalue to DataTable values
//
dataTemplate.VisualTree = control;
templateColumn.CellTemplate = dataTemplate;
templateColumn.Header = "DummyColumn";
dgGrid.Columns.Add(templateColumn);
DataTable table = new DataTable();
table.Columns.Add("DummyColumn");
table.Rows.Add(1);
table.Rows.Add(2);
dgGrid.AutoGenerateColumns = false;
dgGrid.ItemsSource = table.DefaultView;
}
}
公共部分类主窗口:窗口
{
公共类DummyClass
{
public int SelectedValue{get;set;}
公共字符串显示值{get;set;}
}
公共可观测集合DummyClassCollection;
公共主窗口()
{
初始化组件();
DummyClassCollection=新的ObservableCollection();
添加(新的DummyClass(){DisplayValue=“Item1”,SelectedValue=0});
添加(新的DummyClass(){DisplayValue=“Item2”,SelectedValue=1});
添加(新的DummyClass(){DisplayValue=“Item3”,SelectedValue=2});
DataGridTemplateColumn templateColumn=新DataGridTemplateColumn();
DataTemplate DataTemplate=新的DataTemplate();
FrameworkElementFactory控件=新建FrameworkElementFactory(类型(组合框));
control.SetValue(ComboBox.ItemsSourceProperty,DummyClassCollection);
control.SetValue(ComboBox.DisplayMemberPathProperty,“DisplayValue”);
//
//将组合框Selectedvalue连接到DataTable值的一些绑定
//
dataTemplate.VisualTree=控件;
templateColumn.CellTemplate=数据模板;
templateColumn.Header=“DummyColumn”;
dgGrid.Columns.Add(templateColumn);
DataTable=新的DataTable();
表.列.添加(“DummyColumn”);
表.行.添加(1);
表.行.添加(2);
dgGrid.AutoGenerateColumns=false;
dgGrid.ItemsSource=table.DefaultView;
}
}
这是您所需要的一切
control.SetValue(ComboBox.DisplayMemberPathProperty, "DisplayValue");
control.SetValue(ComboBox.SelectedValuePathProperty, "SelectedValue");
control.SetValue(ComboBox.SelectedValueProperty, new Binding("DummyColumn"));
谢谢你的回复。但是,添加第二行不会导致程序运行后组合框显示值。组合框仍然是空白的,就是这样!非常感谢。