首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从窗口打开其他窗口

从窗口打开其他窗口
EN

Stack Overflow用户
提问于 2014-06-17 11:51:06
回答 1查看 75关注 0票数 1

我这里有个学术问题。我阅读了这个问题WPF MVVM Get Parent from VIEW MODEL,并得出结论,ViewModel本身不应该打开任何窗口。因此,我现在使用MessengerViewModelWindow发送消息,Window打开了另一个窗口-- NewWindow。它工作得很好,但是如果NewWindow做了一些事情并得到一些Result,需要在MainWindow中传递,以便采取进一步的行动?更详细的是:

  1. NewWindowWindow (OpenNewWindowCommand)中按一下按钮打开,并做了一些计算。
  2. 经过计算,NewWindow得到了一些Result (不管它到底是什么)并产生了一个相应的事件-- GotSomeResult,其中event是Result
  3. 这个Result必须在MainWindow中传递以进一步处理,因此我将事件处理程序绑定到GotSomeResult事件。

下面可以看到演示此场景所需的所有代码。

MainWindow代码-隐藏:

代码语言:javascript
复制
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();

}

MainWindow ViewModel:

代码语言:javascript
复制
public void OpenNewWindowCommand()
{
    Messenger.Default.Send(new NewWindowMessage(this, new NewWindowViewModel("OpenWindow"), String.Empty));
}

public void ProcessResult(Object someResult)
{
     // Any actions with result
}

((MetaWindowViewModel)DataContext).ProcessResult;newWindowViewModel.GotSomeResult += --这条线对我来说是个问题。访问ViewModel的公共方法在View中正确吗?这是暴力MVVM模式吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-17 12:24:21

为什么不将处理程序连接到VM级别的GotSomeResult,即:

代码语言:javascript
复制
public void OpenNewWindowCommand()
{
    var newWindowViewModel = new NewWindowMessage(this, new NewWindowViewModel("OpenWindow"), String.Empty)
    newWindowViewModel.GotSomeResult += this.ProcessResult;

    Messenger.Default.Send();
}

它删除了代码隐藏中对ViewModel的引用(这确实应该避免):

代码语言:javascript
复制
private void OpenNewWindow(NewWindowMessage message)
{
    var newWindow = new NewWindow();

    newWindow.Owner = this;
    newWindow.DataContext = message.Target;
    newWindow.ShowDialog();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24263060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档