3

我在表单上有想要绑定到组合框的数据。组合框需要始终显示相同的对象,并绑定到对象的不同属性,但其中一个仅显示所有可能对象的子集。

我的对象可以描述为:

{"q",#1,1},{"w",#1,2},{"e",#1,3},{"r",#2,6},{"t",#3,2},{"y",#3,6} etc

第一个组合框显示第一个字段和完整列表,确切地说:

"q","w","e","r","t","y" etc

第二个组合框显示第三个字段,但仅适用于与当前选定对象具有相似第二个字段的对象。

如果选择 {"q",#1,1},则会显示:

1,2,3

如果选择 {"r",#2,6},则显示:

6

在任何组合框中选择另一个项目会更改当前选定的项目和(相应地更新其他组合框)。

使用winforms数据绑定最优雅或“正确”的方法是什么?(对我来说,elegat 不会诉诸于处理当前选定项目的更改)。

4

2 回答 2

1

这可能会有所帮助:

List<Tuple<string, string, int>> values = new List<Tuple<string, string, int>>();

然后:

comboBox1.DisplayMember = "Item1";
comboBox1.DataSource = values;

comboBox2.DisplayMember = "Item3";

var filter = ((Tuple<string, string, int>)comboBox1.SelectedItem).Item2;

comboBox2.DataSource = values.Where(input => input.Item2 == filter);
于 2013-04-22T12:13:32.570 回答
0

为每个要绑定的 ComboBox 创建一个属性。现在,这些属性实际上可以是一个 LINQ 表达式,为您过滤正确的数据。

此类属性的示例:

private final List<MyObj> _allObjects = new List<MyObj>();
... // fill the _allObjects somewhere


public IEnumerable<MyObj> AllGoodObjects 
{
    get { return from o in _allObjects 
                 where o.IsGood
                 select o; }
}

public IEnumerable<MyObj> AllBadObjects 
{
    get { return from o in _allObjects 
                 where !o.IsGood
                 select o; }
}

您可以创建复杂的查询,并以虚拟方式选择您想要的任何内容。

于 2013-04-22T12:14:15.120 回答