当我继续适应wpf和mvvm的新世界时,我发现自己遇到了另一个问题,这个问题有点令人烦恼。
在Windows窗体中,如果我需要一个新表单来获取参数,我只需将我需要的信息传递给该表单的构造函数。因为Winforms本质上是模型背后的代码,所以这不是一个问题。
我现在发现自己有一个MainWindow(由MainWindowViewModel控制)和一个Login(由LoginViewModel控制),它首先显示为对话框。我已经排除了缺少对话框结果的问题,我可以在关闭登录对话框后显示主窗口。
显示登录对话框,并在应用程序启动时使用以下代码进行响应;
dim dlg As New Login
If dlg.ShowDialog() = True Then
Else
Current.Shutdown(0)
End If
我在登录窗口后面的代码中使用以下内容,以便在登录对话框关闭时显示主窗口;
Public Sub New
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Application.Current.ShutdownMode =ShutdownMode.OnExplicitShutdown
End Sub
Protected Overrides Sub OnClosed(e As EventArgs)
MyBase.OnClosed(e)
Application.Current.ShutdownMode = ShutdownMode.OnMainWindowClose
End Sub
现在Mainwindow已经知道它的datacontext是MainWindoViewModel,因为我在设计混合时设置了它,所以我如何传递我想从LoginViewModel传递给MainWindowViewModel的任何参数?
我可以阅读c#但如果可能的话更喜欢vb。我知道这是我想要经常做的事情,所以如果有一个通用的方法来做到这一点,那就是我想去的方式。
由于
答案 0 :(得分:0)
Mvvm框架通常实现某种消息传递系统,以允许数据在视图模型之间移动,或者有时在视图模型和视图之间移动。
您可以在一些更流行的框架(如MvvmLight或MvvmCross)中查看消息传递的处理方式。它通常就像一个使用弱引用来阻止紧耦合的事件,因此您可以注册一种消息,然后从另一个视图模型中向任何已注册的侦听器发布消息。
因此,您需要实现自己的信使,或者现在可能需要考虑开始使用第三方框架,除非您有特定的理由避免这种情况。