1

我正在使用 .Net RIA 服务的 09 年 7 月 CTP,并将 Group=>Department=>Category 对象的对象绑定到树视图,然后让 hierarchialdatatemplate 呈现三种对象类型中的每一种。

我的最终目标是启用拖放功能,以便我可以快速编辑我的组列表=>部门=>类别,并以比以前更直观的方式更改它们各自的关系。

我当前的问题是,当我执行 drop 命令并提交需要提交到数据上下文的更改时,我的树视图正在重绘并折叠叶子。有没有一种方法可以用来避免崩溃?

4

2 回答 2

3

我发布这个答案纯粹是为了那些偶然发现这个帖子寻找答案的人。(在 SL4 中完成)

您需要 2 个列表:

  1. 一个包含从服务接收到的数据(称为 sourceList)
  2. 一个包含要显示的根条目(DisplayList),您的 treeView 绑定到该条目。

您还必须确保您的 Load 操作将其 LoadBehaviour 设置为 Merge。例如:

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

所以现在剩下的就是在每次更新后调用您的 domainContext.Load 并在 CallbackFunction 中将您的 sourceList 替换为 Web 服务返回的新实体列表。由于您的显示列表的向下钻取条目依赖于关联和分层数据模板,因此它仍应在刚刚编辑的条目上展开。

请注意,如果您从头开始重建 DisplayList,则树视图显然会重绘\折叠。

希望这可以帮助某人。简

于 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 回答