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