【问题标题】:Keep TreeView Subtree expanded after dataset refresh数据集刷新后保持 TreeView 子树扩展
【发布时间】:2009-08-19 21:43:49
【问题描述】:

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

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

我当前的问题是,当我执行 drop 命令并提交需要提交到数据上下文的更改时,我的树视图正在重绘并折叠叶子。有什么方法可以避免倒塌吗?

【问题讨论】:

    标签: silverlight silverlight-3.0 treeview drag-and-drop wcf-ria-services


    【解决方案1】:

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

    您需要 2 个列表:

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

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

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

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

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

    希望这对某人有所帮助。 一月

    【讨论】:

      【解决方案2】:

      我没有做过很多 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;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-12
        • 1970-01-01
        • 1970-01-01
        • 2021-05-03
        • 1970-01-01
        • 2010-12-27
        • 1970-01-01
        • 2023-03-10
        相关资源
        最近更新 更多