我正在定义一种策略,其中主视图将使用数据模板在视图之间切换。目前它可以在 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替换了?