2

我有一个首选项窗口,需要检测它是否打开。如果它是打开的,我会关闭它。它关闭了,我打开它。我在类中声明了一个类实例,因此我可以在使用 if 语句的情况下访问它。当我试图访问它时,似乎我不能。在这种情况下,我无法访问 _prefsForm。这是 MVVM。

这是代码:

   Private Views.Dialogs.Preferences _prefsForm;
      ....

       case 4:               
               if (_prefsForm == null)
               {
                     _prefsForm = new Views.Dialogs.Preferences();
                     wih = new WindowInteropHelper(_prefsForm);
                     wih.Owner = hwnd;
                     _prefsForm.Show();
                     _editorState = EditorState.DISPLAYPREFS;

                }
                else
                {
                    _prefsForm.Hide();
                    _editorState = EditorState.VIEWDATA;
                    _prefsForm = null;

                }

              break;
            }
4

1 回答 1

3

您不需要保留对打开Window对象的引用。你可以Window像这样访问你的开放:

Views.Dialogs.Preferences preferencesWindow = null;
foreach (Window window in Application.Current.Windows)
{
    if (window is Views.Dialogs.Preferences)
    {
        preferencesWindow = (Views.Dialogs.Preferences)window;
        break;
    }
}
if (preferencesWindow.Visiblity == Visibility.Visible) preferencesWindow.Hide();
else preferencesWindow.Show();

如果您只有其中一个Window,则使用起来会更容易Linq

using System.Linq;
using Views.Dialogs;
...
Preferences preferencesWindow = 
    Application.Current.Windows.OfType<Preferences>().First();

实际上,Linq即使您拥有多个以下Windows, using 也会变得更容易:

using System.Linq;
using Views.Dialogs;
...
Preferences preferencesWindow = Application.Current.Windows.OfType<Preferences>().
    Where(w => w.Name = NameOfYourWindow).First();
于 2013-09-18T08:37:33.723 回答