使用另一列中的值填充DataGrid的ComboBox

时间:2016-06-03 16:02:06

标签: wpf validation data-binding datagrid datagridcomboboxcolumn

我是Winforms的有经验的用户,我现在正在玩WPF,但我有点挣扎。 我有一个包含2列的数据网格。 第一列是DataGridTextColumn,它绑定到" Name"我的对象的财产。 第二列与'#34; Power"我的对象的财产。

当用户编辑Power列时,我想显示一个组合框,其中列出了第一列的所有名称以及"无"作为第一项。 我怎么能这样做?

此外,如果用户更新第一列的任何名称,我希望更改反映在“电源”列中。有可能吗?

在代码背后:

domain=lambda self: [('category_id.name', '=', 'Trainer')]

在Xaml中:

public partial class MainWindow : Window
{
    ObservableCollection<MyObject> objects = new ObservableCollection<MyObject>();

    public MainWindow()
    {
        InitializeComponent();
        dgObjects.ItemsSource = objects;
    }
}

public class MyObject
{   
    public String Name { get; set; }
    public String Power { get; set; }
}

由于

1 个答案:

答案 0 :(得分:0)

您可以通过None上的绑定来完成此操作。但是,首先您需要正确设置Window DataContext。不应该通过代码隐藏来完成DataContext(这是WPF,使用绑定!)。

设置类结构,如:

ItemsSource

现在,更新你的xaml。您需要使用 public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = new ViewModel(); } } public class ViewModel { public ObservableCollection<MyObject> Objects { get; } = new ObservableCollection<MyObject>(); public ViewModel() { Objects.Add(new MyObject { Name = "Name" }); Objects.Add(new MyObject { Name = "Name2" }); Objects.Add(new MyObject { Name = "Name3" }); } } public class MyObject { public String Name { get; set; } public String Power { get; set; } } 和标准CellTemplate。然后Combobox将绑定到Objects集合,显示Name,但在Power中设置值。

ComboBox