1

私は .Net RIA サービスの 2009 年 7 月の CTP を使用して、Group=>Department=>Category オブジェクトのオブジェクトをツリービューにバインドし、hierarchialdatatemplate に 3 つのオブジェクト タイプのそれぞれをレンダリングさせています。

これに対する私の最終的な目標は、ドラッグ アンド ドロップ機能を有効にして、グループ => 部門 => カテゴリのリストをすばやく編集し、それぞれの関係を以前よりも直感的な方法で変更できるようにすることです。

私の現在の問題は、ドロップ コマンドを実行し、データ コンテキストに送信する必要がある変更を送信すると、ツリービューが再描画され、葉が折りたたまれていることです。崩壊を回避するために使用できる方法はありますか?

4

2 に答える 2

3

答えを探してこのスレッドに出くわした人のために、この答えを投稿しています。(SL4 で行われました)

2 つのリストが必要です。

  1. サービスから受信したデータを含むもの (sourceList と呼ばれる)
  2. 1 つは、表示するルート エントリ (DisplayList) を含み、そこに treeView がバインドされます。

また、Load 操作の LoadBehaviour が Merge に設定されていることも確認する必要があります。例えば:

    domainContext.Load(domainContext.GetEntityQuery(), LoadBehavior.MergeIntoCurrent, CallbackFunction, userState);

後は、各更新後に domainContext.Load を呼び出し、CallbackFunction で sourceList を Web サービスから返されたエンティティの新しいリストに置き換えるだけです。表示リストのドリル ダウン エントリは関連付けと階層データ テンプレートに依存しているため、編集したばかりのエントリで展開する必要があります。

DisplayList を最初から再構築すると、ツリービューは明らかに再描画/崩壊することに注意してください。

これが誰かに役立つことを願っています。1月

于 2011-11-18T10:42:51.180 に答える
0

私は多くの Silverlight の作業を行っていませんが、私が見たところ、オブジェクト モデルはかなり制限されているため、これを行うためのイベント/プロパティ/メソッドの一部が存在しない可能性があります。ただし、状態を自分で保存/復元してみることができます...次の疑似コードに似たもの:

private expandeds as collection();

tree.OnNodeExpand() {
    expandeds.add(tree.CurrentNode.key);
}

tree.OnNodeCollapse() {
    expandeds.remove(tree.CurrentNode.key);
}

tree.AfterBind() {
    for each key in expandeds {
        tree.FindNodeByKey(key).expanded = true;
    }
}
于 2009-11-22T16:52:09.050 に答える