0

Observableコレクションがあり、コレクションのアイテムにタグ(文字列)とisChecked(ブール値)があります。

ユーザーはタグを選択してリストを並べ替えることができます(例:「イベント」)および/またはIsCheckedを設定します。

順序の優先度は次のように機能する必要があります:1)isChecked == true 2)タグはアイテムタグと等しい3)残りのアイテムはタグのアルファベット順に並べ替えられます

xamlを介してListBoxにObservableCollectionを表示します。これをどのように達成できるか考えていますか?

EDIT: providing example for clarification:
item0: tag = "apple", isChecked = false;
item1: tag = "apple", isChecked = true;
item2: tag = "pineapple", isChecked = false;
item3: tag = "coconut", isChecked = true;
item4: tag = "cherry", isChecked = false;

string is: "cherry"
outcome: item1, item3, item4, item0, item2
4

3 に答える 3

2

あなたの状態を取得できるようにするために、私は以下を行いました。

 // Retrieve an IQueryable for the colleciton with your specified conditions
 var query = from c in collection
             orderby c.IsChecked descending, c.Tag.Equals("cherry") descending, c.obsTag
             select c;

 // Clear the collection
 collection = new ObservableCollection<myCollectionObject>();
 // Replace the collection with your IQueryable results
 foreach(myCollectionObject obj in query) {
      collection.Add(obj);
 }

すべてを1行で表示したい場合:

 collection = new ObservableCollection<obsCol>(from c in collection 
              orderby c.obsCheck descending, c.obsTag.Equals("cherry") descending, c.obsTag 
 select c);
于 2012-12-11T16:33:11.153 に答える
1

UIだけでなくモデルの実装からも分離するには、CollectionViewSourceを使用する必要があります

カスタムComprarerを使用してオブジェクトのリストを並べ替える具体的な例は、次の場所にあります。

WPF:並べ替え、フィルタリング、およびグループ化のためのListCollectionView

于 2012-12-11T14:55:46.163 に答える
0

その#2は少しトリッキーです。

そのためには、2つのステップでそれを構築するコードの背後に別のPublicEnumerableが必要になる場合があります。

OPは、この道を進む前に、#2が何であるかを明確にしてください。

2タグはタグと等しい

3タグのアルファベット順

まったくはっきりしていません。タグへの3つの参照。

あなたのコメントに基づいて、2つ
のセットでリストを作成する必要があります。問題の説明にはコメントが反映されていません。
人々がコメントを読むことを期待することはできません。

IsChecked=TrueおよびTag='一致'

次に追加

IsChecked = falseまたはTag!='一致'タグによる順序

申し訳ありませんが、現在LINQの時間はありません。正直なところ、問題の説明にあまり力を入れていません。

于 2012-12-11T15:00:56.083 に答える