1

2つのListViewを備えたWinRTC#アプリがあります。それを表す簡単な方法は、1つのListViewがフォルダーの場所のリストであり、2番目のListViewがそのフォルダー内のディレクトリ構造の詳細を示すことです。

 ListView1     ListView2 (Contents of Folder 2)
 Folder 1      Folder a
|Folder 2|       File a
 Folder 3        File b
 Folder 4      Folder b
                 Folder c
                   File c
                 File d

そんな感じ。

フォルダのコレクションであるメインのObservableCollectionがあります。各フォルダーには、2番目のListViewで使用されるデータである独自のObservableCollectionが含まれています。

ListView1と2は、基本的に同じようにバインドされます。

ItemsSource="{Binding Source={StaticResource folderViewSource}}"
ItemsSource="{Binding Source={StaticResource fileViewSource}}"

CollectionViewSourcesが次のように定義されている場合:

<!-- The list of folders, used by the main ListView -->
<CollectionViewSource
    x:Name="folderViewSource"
    Source="{Binding FolderBinding}" />

<!-- The files and folders for a specific folder, used by the Files ListView -->
<CollectionViewSource
    x:Name="fileViewSource"
    Source="{Binding ElementName=folderListView, Path=SelectedItem.Files}" />

ListView1は正常に読み込まれ、問題はありません。

ListView2は正しくバインドされます(最初のListViewで選択されたフォルダーのファイルが表示されます)が、バインドはUIスレッドで行われます。私のPCでは、不快な場合でも許容できます。私のSurfaceRTでは、2秒かかることがあります。

2番目のListViewで使用されているテンプレートは非常に扱いにくいですが、文字列に絞り込んだだけで、Surfaceではまだ少しぎくしゃくしていました。明らかにUIスレッドから移動する必要があります。

私の最初の考えは、バインディングをXAMLから移動してコードで実行することでしたが、それを改善する方法がわかりませんでした。Windowsは、何をするかに関係なく、UIスレッド上にUI要素を作成しています。

ISupportIncrementalLoadingも調べましたが、これはスクロール時に新しいアイテムを動的にロードするためのもののようです。

私はしばらく立ち往生していて、忙しいことがありましたが、これに戻りたいのですが、これを理解することはできません。うまくいけば、私は明らかな何かが欠けています。

4

0 に答える 0