我正在使用 .Net RIA 服务的 09 年 7 月 CTP,并将 Group=>Department=>Category 对象的对象绑定到树视图,然后让 hierarchialdatatemplate 呈现三种对象类型中的每一种。
我的最终目标是启用拖放功能,以便我可以快速编辑我的组列表=>部门=>类别,并以比以前更直观的方式更改它们各自的关系。
我当前的问题是,当我执行 drop 命令并提交需要提交到数据上下文的更改时,我的树视图正在重绘并折叠叶子。有没有一种方法可以用来避免崩溃?
我正在使用 .Net RIA 服务的 09 年 7 月 CTP,并将 Group=>Department=>Category 对象的对象绑定到树视图,然后让 hierarchialdatatemplate 呈现三种对象类型中的每一种。
我的最终目标是启用拖放功能,以便我可以快速编辑我的组列表=>部门=>类别,并以比以前更直观的方式更改它们各自的关系。
我当前的问题是,当我执行 drop 命令并提交需要提交到数据上下文的更改时,我的树视图正在重绘并折叠叶子。有没有一种方法可以用来避免崩溃?
我发布这个答案纯粹是为了那些偶然发现这个帖子寻找答案的人。(在 SL4 中完成)
您需要 2 个列表:
您还必须确保您的 Load 操作将其 LoadBehaviour 设置为 Merge。例如:
domainContext.Load(domainContext.GetEntityQuery(), LoadBehavior.MergeIntoCurrent, CallbackFunction, userState);
所以现在剩下的就是在每次更新后调用您的 domainContext.Load 并在 CallbackFunction 中将您的 sourceList 替换为 Web 服务返回的新实体列表。由于您的显示列表的向下钻取条目依赖于关联和分层数据模板,因此它仍应在刚刚编辑的条目上展开。
请注意,如果您从头开始重建 DisplayList,则树视图显然会重绘\折叠。
希望这可以帮助某人。简
我没有做过很多 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;
}
}