隐藏窗口MVVM

时间:2018-07-13 08:04:06

标签: c# wpf mvvm

我有两个Window。我想打开一个,然后隐藏/关闭当前的。

GlowBrush="{DynamicResource AccentColorBrush}"                   
WindowStartupLocation="CenterScreen"  Visibility="{Binding WindowVisible, Converter={StaticResource BooleanToVisibilityConverter}}">

ViewModel:

  var taskViewModel = new EmployeViewModel(Convert.ToInt32(userId)); 
  Window2 X = new Window2(taskViewModel);
  WindowVisible = false;
  X.Show();

   private bool _windowVisible;
   public bool WindowVisible
    {
        get { return _windowVisible; }
        set
        {
            _windowVisible = value;
            NotifyOfPropertyChange("WindowVisible");
        }

    }

第二个窗口正在打开,但第一个窗口什么也没有发生。

3 个答案:

答案 0 :(得分:0)

将您的XAML更改为此

GlowBrush="{DynamicResource AccentColorBrush}"                   
WindowStartupLocation="CenterScreen" >
<Window.Resources>
     <!--YOUR CONVERTER -->
</Window.Resources>
<Window.Visibility>
    <Binding Path="WindowVisible" Converter="{StaticResource BooleanToVisibilityConverter}" />
</Window.Visibility>

如果仍然无法正常工作,请在WindowVisible吸气剂上设置一个断点,并观察转换器是否正在尝试获取它。

我刚刚尝试了一下,它奏效了,所以让我知道是否不适合你

答案 1 :(得分:0)

这是我重写窗口内容的方法。

ContentOverride.OverRideContent<WindowtobeHide>(userControl);

public static class ContentOverride
{
    public static void OverRideContent<T>(UserControl objMain)
    {
        foreach (Window window in Application.Current.Windows)
        {
            if (window.GetType() == typeof(T))
            {                    
                window.Content = objMain;
                window.Activate();
            }
        }
    }
}

您可以使用

 window.Visibility = Visibility.Hidden;

隐藏而不是像我正在做的那样替换内容

答案 2 :(得分:-1)

您可以写一个InverseBooleanToVisibilityConverter