C# DataGrid组合框SelectedValue

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

我编写了一个简单的示例,其中WPF表单上的
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"));

谢谢你的回复。但是,添加第二行不会导致程序运行后组合框显示值。组合框仍然是空白的,就是这样!非常感谢。