扩展器的多层“全部扩展”?

时间:2011-11-07 20:46:40

标签: wpf mvvm expander

我正在编写一个MVVM配置界面,我正在尝试实现一个适用于所有视图的展开/折叠所有函数。

顶级ViewModel是其他ViewModel的同类集合,它绑定到视图中的ItemsControl。这些子ViewModel中的每一个都有许多依赖的ViewModel,每个ViewModel都绑定到View中的ContentControl。在视觉上,它采用一组扩展器(例如,其中3个),每个扩展器内部都有4-6个扩展器。

我尝试过自上而下的搜索方法。由于顶级扩展器已经折叠,他们的子扩展器甚至不会存在,直到它们第一次显示(Caliburn.Micro在他们第一次被要求时为他们查看位置),以及“展开全部”行动只扩大第一级。

逻辑树也没有任何帮助。顶级ItemsControl的Items属性实际上包含我的ViewModel类型的对象,因此我无法在其中查找扩展器。

我曾想过在ViewModel级别管理它,但是为所有VM添加IsExpanded属性并使用某个全局管理器设置它似乎很麻烦。 VM没有其他原因可以知道扩展了哪些扩展器。

处理此问题的最佳方法是什么?我可以拉一些附属物绑定技巧吗?

1 个答案:

答案 0 :(得分:1)

您的ViewModel应该有一个扩展自身的函数,并在其子节点中调用相同的函数。

public abstact class BaseItem
{
   public List<BaseItem> Children;

   public virtual void SetSelfAndChildrenExpandedState(bool inState)
   {
      // Expand Self
      IsExpanded = inState;
      // Expand Children
      foreach (BaseItem i in Children)
      {
          i.SetSelfAndChildrenExpandedState(inState);
      }
   }

   public bool IsExpanded { get; set; }
}

现在你只需要连接你的“全部展开”动作,用适当的参数调用SetSelfAndChildrenExpandedState()。

这可能对你有用......给它一个想法。

相关问题