1

パズルが好きな方へ: 最近この問題が発生しましたが、もっと良い解決策があるはずです。

検討 :

  • foosと呼ばれるFooオブジェクトの ObservableCollection 。
  • Fooには文字列 ID フィールドが含まれています
  • 私はfoosを制御できません
  • フードが変わる

それで:

  • sortLikeThisという別のコレクションがあります
  • sortListこれには文字列が含まれます
  • 文字列は、 fooが表示される順序の ID です。

プラス:

  • sortLikeThisにない ID を持つオブジェクトが foos にある可能性があります。これらは最後に行く必要があります。
  • 同様に、 foos には表示されない文字列が sortLikeThis に含まれる場合あります

sortLikeThisの ID で定義された順序でfoosのFooオブジェクトにバインドして wpf に表示する良い方法はありますか?

4

2 に答える 2

2

Bindable LINQを見たことがありますか?これにより、監視可能なコレクションの上に LINQ クエリを定義でき、基になるコレクションが変更されるたびに LINQ クエリが実行されるようになります。あなたの場合、コレクションの上に Orderby クエリを追加できます。

Orderby メソッドにデリゲートを渡して比較を行うことができます。これを設定するには、

  1. sortLikeThis の各 ID を昇順の int にマッピングする Dictionary を作成して準備します。
  2. 比較デリゲート内で、比較のために渡される 2 つの foo の ID を辞書で検索します。アイテムが見つからない場合は、適切な処理を行います。
于 2008-10-02T13:09:24.697 に答える
2

IEnumerable を実装し、カスタム ソートのロジックを処理する非常に小さな列挙子 (aah、yield) を持つカスタム監視可能なコレクションの仕事のように聞こえます。

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