2

UI 要素を使用する Windows アプリを変更し ています。ユーザーが階層からアイテムを選択できるようにしたいので、次のようになります。System.Windows.Control

木

それはフォルダーではなく、リモートオブジェクトの巨大な階層であり、非常に深く、取得に時間がかかります。
表示する前に階層全体を読み込むのは遅すぎるため、最初のレベルを表示してから、ユーザーがクリックしたときにフォルダー内を表示する必要があります。

必要に応じて、要素にaSystem.Windows.Control.TreeViewおよび intercept 選択イベントを使用してそれらを設定することを考えています。質問:それはベスト プラクティス戦略ですか、それともこれにより適した UI 要素はありますか?TreeViewItem
System.Windows.Control

クリックされた要素の各フォルダーのコンテンツを読み取るコンポーネントも許容されます。
アプリは.NET 4.5.

4

2 に答える 2

3

私の理解が正しければ、親ノードが展開されたとき (展開アイコンをクリックするなど) にのみ子ノードをロードする必要があります。UX の観点からすると、ノードの展開時に子をロードする方が、ノードの選択時に子をロードするよりも確かに適切に聞こえます。

すぐに使えるものは知りませんが、自分で簡単に作成できます。これについて私が見たアプローチは、子がまだフェッチされていない各ノードの下にダミーノードを追加し、ノードを展開するためのイベントハンドラーで、ダミーノードがあるかどうかを確認し、ある場合は実際の子ノードをロードすることですダミーをそれらに置き換えます。

ダミー ノードにより、その親が展開可能に見えるようになります (たとえば、'+' アイコンまたは折りたたまれた三角形が表示されます)。これはおそらく必要なものです。「(読み込んでいます...)」とかダミーのタイトルなどを入れるとそれなりのユーザー体験が得られます。

于 2012-10-02T07:24:34.687 に答える
0

1) TreeView を作成します。

System.Windows.Controls.TreeView treeView = new System.Windows.Controls.TreeView();
ContentCanvas.Children.Add(treeView);

2) ルート アイテムを挿入します。

System.Windows.Controls.TreeViewItem root = new System.Windows.Controls.TreeViewItem();
root.Header = repository;
treeView.Items.Add(root);

3) 1 つの項目を選択したら、必要に応じてサブ項目を追加します。

treeView.SelectedItemChanged += delegate
{
    TreeViewItem item = (TreeViewItem)treeView.SelectedItem;
    SparkleLogger.LogInfo("bla", "object:"+item);
    System.Windows.Controls.TreeViewItem subItem = new System.Windows.Controls.TreeViewItem();
    subItem.Header = "hello";
    item.Items.Add(subItem);
};

追加は最初の選択時にのみ行う必要があります。そうしないと、要素が複製されます。
より良い解決策は大歓迎です!

于 2012-10-02T03:52:59.287 に答える