【发布时间】:2019-09-18 07:29:17
【问题描述】:
我在我的 MVVM WPF 应用程序中使用 AvalonDock 组件。在我的 XAML 中,我有这样的东西:
<xcad:DockingManager Name="_dockingManager" Margin="5" Grid.Row="2"
DataContext="{Binding DockingManagerViewModel}"
DocumentsSource="{Binding Documents}"
ActiveContent="{Binding Path=ActiveContent, Mode=TwoWay}"
AnchorablesSource="{Binding Anchorables}">
现在我想对布局更改做出反应。如上面的 XAML sn-p 所示,我已将 DockingManager 绑定到“DockingManagerViewModel”。所以我假设也在我的视图模型中处理布局更改。主要问题是停靠管理器提供了一个 LayoutChanging 和 LayoutChanged 事件,我不知道如何在我的视图模型中处理它。我想我无法将这些事件绑定到我的视图模型中的相应命令?知道处理这个问题的最佳方法是什么吗?
为了更好地理解,我想要实现如下:用户显示一个“属性”窗口,然后将窗口从右侧拖到左侧。之后,用户关闭“属性”窗口,并在用户决定再次显示属性窗口后不久。在这种情况下,我想带回左侧的窗口,因为这是最后一个位置。所以我的想法是在布局更改期间将最后一个位置存储在视图模型中,以便在再次显示视图时恢复该位置。
【问题讨论】:
-
布局发生变化时你想做什么?它应该只影响视图还是底层数据(视图模型)?我想你可以在前者中有一些代码隐藏,或者在后者中绑定到你的视图模型中的命令。
-
@CorentinPane:用户可以在应用程序的生命周期内显示或隐藏视图。如果用户在之前隐藏后再次显示视图,则该视图应该出现在与之前完全相同的位置。因此,我认为我可以将这些信息存储在视图模型中以便稍后检索它
-
我并不特别了解 xcad:DockingManager,但您为什么要听 LayoutChanged 事件来了解是否应该隐藏或显示您的视图?用户实际上将如何隐藏或显示视图?通过点击按钮?
-
向视图添加事件处理程序并从那里执行视图模型命令?
-
@CorentinPane:我已经更新了上面的描述以澄清我的问题
标签: c# wpf mvvm avalondock xceed