1

对于那些喜欢谜题的人:我最近遇到了这个问题,相信一定有更好的解决方案。

考虑 :

  • Foo对象的 ObservableCollection称为foos
  • Foo包含一个字符串 ID 字段
  • 我无法控制foos
  • foos会改变

然后:

  • 我有另一个名为sortLikeThis的集合
  • sortListThis包含字符串
  • 字符串是按照foo显示顺序的 ID

加:

  • foos中可能有ID 不在sortLikeThis中的对象。这些需要放在最后。
  • 同样, sortLikeThis中可能有一些字符串不会出现在foos中。

有没有一种很好的方法可以按照 sortLikeThis 中的 ID 定义的顺序绑定到 foos 中的 Foo 对象并在wpf显示这些对象?

4

2 回答 2

2

听起来像是自定义 observable 集合的工作,它实现了 IEnumerable 并且有一个非常小的枚举器(aaah,yield)来处理自定义排序的逻辑。

public class SortFoosLolThx : ObservableCollection<Foo> {
public IList<string> SortList {/*...*/}
/*...*/
public override IEnumerator<Foo> GetEnumerator() { /*...*/ yield foo; /*...*/}
}
于 2008-10-02T12:04:23.730 回答
2

你看过Bindable LINQ吗?它允许您在可观察集合之上定义 LINQ 查询,并确保每次更改基础集合时都执行 LINQ 查询。在您的情况下,您可以在集合顶部添加一个 Orderby 查询。

您可以将 Orderby 方法传递给委托来进行比较。要进行此设置,您将

  1. 通过创建一个 Dictionary 将 sortLikeThis 中的每个 id 映射到一个升序 int 来准备
  2. 在比较委托中,在字典中查找传递用于比较的两个 foo 的 id。如果找不到项目,请执行适当的操作。
于 2008-10-02T13:09:24.697 回答