如何同时绑定到列表和子列表
本文关键字:列表 何同时 绑定 | 更新日期: 2023-09-27 18:10:15
我有数据的形式,我想绑定到组合框。组合框需要在任何时候都显示相同的对象,并且绑定到对象的不同属性,但是其中一个组合框只显示所有可能对象的子集。
我的对象可以描述为:
{"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不会诉诸于处理当前选定项的更改)。
这可能有帮助:
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);
为每个要绑定的组合框创建一个属性。现在,属性实际上可以是一个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; }
}
您可以创建复杂的查询,几乎可以选择任何您想要的。