【发布时间】:2012-06-21 11:48:38
【问题描述】:
我正在定义一个策略,其中主视图将使用数据模板在视图之间切换。目前它可以在 3 个视图之间切换:
- ApplicationView:它实际上是由许多 不同的视图,主要使用选项卡/停靠进行分层。这是一个 处理应用程序数据的视图。
- LogInView:用于登录用户。
- DialogView:用于显示对话框视图。此视图还将使用数据模板来选择所需的适当视图。
这个想法是当需要显示一个对话框视图时,它被设置为主视图上的当前视图。选择完成后,此信息将传递给 ApplicationView,或作为 ApplicationView 一部分的视图。在显示 DialogView 时,不能从内存中释放 ApplicationView,因为 ApplicationViewModel 仍将处理数据(它需要在后台持续工作)。
我正在考虑使用 DataTemplates 来实现这一点,并将 ContentControl 的内容绑定到 CurrentView:
// in MainView
DataTemplate DataType="{x:Type vm:ApplicationViewModel}">
<vw:ApplicationView />
</DataTemplate>
.....
// in MainViewModel
public ViewModelBase CurrentView { get; set; }
基本上,我试图避免将模式窗口用于对话框。
1) 这个策略可以吗,还是有一些我不知道的问题?
2) 当我切换到 DialogView(我实际上是在切换视图模型)时,ApplicationView/ApplicationViewModel 会发生什么情况?我是否需要将 ApplicationViewModel 的引用存储在某处,这样它就不会被垃圾收集?我没有对此进行测试,但可能在我设置 CurrentView 时会创建一个新的 ViewModel/View 实例。
3) 连接到第二个问题,当使用 DataTemplates 时,以前使用的 View/ViewModel 会发生什么,现在被不同的 view/viewmodel 替换了?
【问题讨论】: