WPF绑定到对象的集合,按在C#中的另一个集合中顺序存储的ID排序
时间:2020-03-06 15:01:18 来源:igfitidea点击:
对于那些喜欢困惑的人:我最近遇到了这个问题,并且肯定必须有一个更好的解决方案。
考虑 :
- 一个名为foos的Foo对象的ObservableCollection。
- Foo包含一个字符串ID字段
- 我无法控制foos
- foos将会改变
然后:
- 我还有另一个名为sortLikeThis的收藏集
- sortList这包含字符串
- 字符串是显示foo的顺序的ID。
加:
- foos中可能有ID不在sortLikeThis中的对象。这些需要最后解决。
- 同样,sortLikeThis中可能有一些字符串没有出现在foos中。
有没有一种好方法可以按sortLikeThis中ID定义的顺序绑定并在wpf中显示foos中的Foo对象?
谢谢,
李
解决方案
听起来像是实现IEnumerable的自定义可观察集合的工作,并且有一个处理自定义排序逻辑的枚举器(aaah,yield)。
public class SortFoosLolThx : ObservableCollection<Foo> { public IList<string> SortList {/*...*/} /*...*/ public override IEnumerator<Foo> GetEnumerator() { /*...*/ yield foo; /*...*/} }
我们是否看过可绑定的LINQ?它允许我们在可观察的集合之上定义LINQ查询,并确保每次更改基础集合时都执行LINQ查询。对于情况,我们可以在集合顶部添加一个Orderby查询。
我们可以将委托委托给Orderby方法,以进行比较。要进行设置,我们将
- 通过创建一个字典将sortLikeThis中的每个id映射到一个升序的int进行准备
- 在比较委托中,在字典中查找为进行比较而传递的两个foo的ID。如果找不到项目,请执行适当的操作。