【问题标题】:How to open & close a Window & UserControle in WPF MVVM Light?如何在 WPF MVVM Light 中打开和关闭窗口和用户控件?
【发布时间】:2017-04-19 10:23:11
【问题描述】:

假设我们有一个应用程序的主窗口,我们想要第二个窗口或用户控件(最适合的)作为设置窗口。我们如何使用 mvvmLight 方法打开和关闭这个窗口?

这是我目前用于打开一个新窗口的代码。

var settingWindow = new SettingsViewWindow();
    settingWindow.Show();

这是我目前用于关闭窗口的代码。

This.Close();

我不太了解 userControle 控件以及何时使用它。如果你知道一个 youtube 视频或一个网站,我可以阅读它,它会被 appritacted。或者干脆放弃解释。

以下是我构建 MenuItem 点击事件的方式。就目前而言,这就是我喜欢为我的事件处理程序敲击一般按钮的方式,并将它们放在一个描述性的 regrion 中。 如果我知道如何将这个底部放在 spolier 中。 ;)

private void btnNav_Click(object sender, RoutedEventArgs
  {
    if(sender == btnNavSettings)
      {
          OpenSettingsWindow();
      }
      else if(sender == btnNavExitApp)
      {
          ShutDownApplication();
      }
   }

/// <summary>
/// Opens a settings window.
/// Only on settings window can be open at time.
/// </summary>
private void OpenSettingsWindow()
  {
    if(GlobalVariabels.GUI_Variabels.SettingsWindowIsOpen != true)
      {
         var settingWindow = new SettingsViewWindow();
         settingWindow.Show();
      }
  }

/// <summary>
/// Exit the application properly.
/// </summary>
private void ShutDownApplication()
  {
     Application.Current.Shutdown(0);
  }

【问题讨论】:

  • 您当前所做的事情违反了很多 MVVM 原则。当我可以访问计算机时,我会添加一个解释性答案。

标签: c# wpf windows user-controls mvvm-light


【解决方案1】:

例如,您可以使用Messenger 类在两个组件(例如视图模型和视图)之间传递消息:

MVVM Light WPF open new window How to open a new window using MVVM Light Toolkit

或者您可以创建一个对话服务来处理窗口的打开:

Best Pratice to open a New Window in MVVM Light with Parameters

然后你用这样的对话服务注入视图模型:

Separate project for view models to "enforce" MVVM: How do I open dialogs?

有很多关于这个主题的链接。如果您需要更多信息,请参阅我在此处提供的内容以及 Google 或 Bing :)

【讨论】:

    猜你喜欢
    • 2015-03-03
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    相关资源
    最近更新 更多