31

コレクションをソートするビューを作成したことのある人はいますか? ICollectionView インターフェースが存在し、対応する WPF/SL と同じ責任 (並べ替え、ページング、フィルタリング) を持っていると主張していますが、何かを見逃していない限り、インターフェースに並べ替えメソッド/プロパティはありません

アイテムのコレクションを取得し、WinRT のビューを介してそれらを並べ替える方法を知りたいと思います。

これを手動で行うことができることはわかっていますが、並べ替えが実行されたときに視覚効果を追加するように見える WinRT テーマの遷移と、並べ替えられたコレクションがどのように相互作用するかを確認したいと考えています。

4

2 に答える 2

4

残念ながら、Win8 ではコレクション ビューの並べ替えはサポートされていません (フィルタリングやグループ化もサポートされていません)。これを行う唯一の方法は、データ ソースを直接操作してから、それを Source プロパティに割り当てることです。

これは、Win8 以降の期間の改善として議論されています。もっと良いニュースがあればいいのに:)

于 2012-06-24T05:50:27.627 に答える
2

Sort と Filter が AWOL になった今、Linq が推奨される方法のようです。

したがって、モデルに次のようなものを採用できます。

    private MyDataSourceProvider dataSource;
    private ObservableCollection<MyType> sortedDataBackingField;

    public ObservableCollection<MyType> SortedData
    {
        get
        {
            return sortedDataBackingField;
        }
        set
        {
            sortedDataBackingField = value;
            NotifyPropertyChanged("SortedData");
        }
    }


    public void SortByName()
    {
        SortedData = new ObservableCollection<MyType>(dataSource.Entities.OrderBy(
          entity => entity.Name));
    }

    public void SortByAge()
    {
        SortedData = new ObservableCollection<MyType>(dataSource.Entities.OrderBy(
           entity => entity.Age));
    }

選択したパターンで SortByName と SortByAge を UI にフックし、単に SortedData プロパティにバインドします。

<ItemsControl ItemsSource=”{Binding SortedData}”/>

編集:トランジションを参照すると、このアプローチは、並べ替えたアイテムの AddDeleteThemeTransition をトリガーすることがわかります。ItemsControl 内に次のようなものを追加するだけです。

<ItemsControl.ItemContainerTransitions>
    <TransitionCollection>
        <AddDeleteThemeTransition></AddDeleteThemeTransition>
    </TransitionCollection>
</ItemsControl.ItemContainerTransitions>
于 2012-07-03T16:27:38.060 に答える