ReactiveUI(およびReactive extensions)を使用して、UWPアプリケーションでGrouped GridView/ListViewを作成しました。それは非常に簡単ですし、表示されたリストのソート関数とフィルター関数を事前に定義することもできます。以下は、フォルダやファイルであるかどうかにかかわらず、一連のアイテムを分割するために使用したコードです。名前をアルファベット順にソートしています。グループ化されたリストビューを使用すると、IReactiveDerivedListのフィルタまたは並べ替え関数を更新するにはどうすればよいですか?
var _backingGroups = new ReactiveList<ItemGroup<ItemViewModel>>();
_backingGroups.Add(new ItemGroup<ItemViewModel>()
{
Title = "Folders",
Items = Files.CreateDerivedCollection(
x => x,
x => x.MimeType == "application/vnd.google-apps.folder",
(x, y) => x.Name.CompareTo(y.Name)
)
});
_backingGroups.Add(new ItemGroup<ItemViewModel>()
{
Title = "Files",
Items = Files.CreateDerivedCollection(
x => x,
x => x.MimeType != "application/vnd.google-apps.folder",
(x, y) => x.Name.CompareTo(y.Name)
)
});
GroupedFiles = _backingGroups.CreateDerivedCollection(
x => x,
x => x.Count > 0,
(x, y) => { if (x.Title == "Folders") { return -1; } else { return 1; } }
);
これは、素晴らしいですが、私が今欲しいのは動的に並べ替えを変更することです。
私はItemGroups内でDerivedCollectionを再作成しようとしました。私はDerivedCollection全体を再作成しようとしました。しかし、私がそのようなことをすると、ビデオカードドライバがクラッシュすることがあります(時々起こります)...画面が黒くなり、1秒間停止します。私はその作業を呼び出すことはありません...
グループ化されたリストビューの基になるグループを更新する適切な方法は、全体を再描画せずにですか?
更新日11/9 問題は複数のグループの内容を同時に変更しようとしていることがわかりました。全体のコレクションをシンプルなList<ItemGroup<ItemViewModel>>
に簡略化しました。そして、私はCreateDerivedCollectionメソッドのresetパラメータに "変更されたソート関数"を観察可能にしました。両方ともリセット信号を受け取ると、画面は空白になり、ビデオドライバに問題があります。派生リストのうちの1つにのみリセットパラメータを設定すると、正常に動作します。そのリストはソートされ、グラフィックスは安定しています。
これは、CollectionViewSourceが両方の変更を一度に処理する方法と関係があります。私はまだ困っている。