【发布时间】:2014-08-07 10:06:54
【问题描述】:
我在这里有一些学术问题。我读了这个问题WPF MVVM Get Parent from VIEW MODEL 并得出结论ViewModel 本身不应打开任何窗口。所以我现在使用Messenger 将消息发送到ViewModel 的Window 和Window 打开其他窗口-NewWindow。它工作正常,但是如果NewWindow 做了一些事情并得到一些Result 必须在MainWindow 中传递以进行进一步的操作怎么办?更详细:
-
NewWindow通过在Window(OpenNewWindowCommand) 中单击按钮打开并进行了一些计算。 - 经过计算
NewWindow得到一些Result(不管它到底是什么)并引发相应的事件 -GotSomeResult,其中事件 arg 是Result。 - 这个
Result必须传入MainWindow以进一步处理,所以我将事件处理程序绑定到GotSomeResult事件。
您可以在下面看到说明此场景所需的所有代码。
MainWindow 代码隐藏:
public MainWindow()
{
InitializeComponent();
DataContext = new MainWindowViewModel();
Messenger.Default.Register<NewWindowMessage>(this, OpenNewWindow);
}
private void OpenNewWindow(NewWindowMessage message)
{
var newWindow = new NewWindow();
var newWindowViewModel = (NewWindowViewModel) message.Target;
newWindowViewModel.GotSomeResult += ((MetaWindowViewModel)DataContext).ProcessResult;
newWindow.Owner = this;
newWindow.DataContext = newWindowViewModel;
newWindow.ShowDialog();
}
主窗口视图模型:
public void OpenNewWindowCommand()
{
Messenger.Default.Send(new NewWindowMessage(this, new NewWindowViewModel("OpenWindow"), String.Empty));
}
public void ProcessResult(Object someResult)
{
// Any actions with result
}
newWindowViewModel.GotSomeResult += ((MetaWindowViewModel)DataContext).ProcessResult; --- 这个字符串对我来说似乎有问题。在View 中访问ViewModel 的公共方法是否正确?是不是暴力MVVM模式?
【问题讨论】:
-
这就是我在 mvvm stackoverflow.com/questions/3801681/… 中进行对话的方式