C# 在其已加载事件WPF中停止渲染窗口

C# 在其已加载事件WPF中停止渲染窗口,c#,wpf,C#,Wpf,我定义了一个视图作为类子窗口的实例,其定义如下 public partial class SubWindow : Window { public SubWindow(BaseViewModel vm) { InitializeComponent(); this.Loaded += OnLoaded; vm.CloseWindow += (s, e) => this.Close(); vm.Hide += (s,

我定义了一个视图作为类子窗口的实例,其定义如下

public partial class SubWindow : Window
{
    public SubWindow(BaseViewModel vm)
    {
        InitializeComponent();
        this.Loaded += OnLoaded;
        vm.CloseWindow += (s, e) => this.Close();
        vm.Hide += (s, e) => this.Hide();
        this.Content = vm;
        this.DataContext = vm;
    }

    private void OnLoaded(object sender, RoutedEventArgs e)
    {
        BaseViewModel vm = DataContext as BaseViewModel;
        if (vm != null)
        {
            vm.OnInitDialog()
        }
    }
}
这是我的ViewModel基类

public class BaseViewModel() // implements INotifyPropertyChanged
{   
    public event EventHandler CloseWindow;

    public virtual bool OnInitDialog()
    {        
    }


    public virtual void OnCancel(object param)
    {
        CloseWindow(null, null);
    }
}
然后是我的具体视图模型类

public class MyViewModel : BaseViewModel
{
    public MyViewModel() 
    {
        // Init ViewModels
    }
    public bool OnInitDialog()
    {

        if(check()) 
        {
           OnCancel(null);
           return false;
        }
        return true;
    }
}
这是我如何显示我的窗口

MyViewModel vm = new MyViewModel();
Window window = new SubWindow(vm);
window.ShowDialog();
加载窗口时,将引发OnLoaded事件

在OnLoaded事件中,它将调用ViewModel的OnInitDialog方法

问题出在OnInitDialog()内部,如果check()返回true,则将调用OnCancel(),后者依次调用ViewModel的CloseWindow()和View的Close()

换句话说,窗口的Close()是在其ShowDialog()中调用的,我认为这不是一个好的做法

如果解决方案是在发布模式下构建的,有时会引发异常


所以我的问题是如何在加载窗口后停止渲染它。

您关于调用close inside OnLoaded的感觉似乎是对的。但是“停止渲染”是如何解决问题的呢?还有
vm==null
这个令人困惑的例子呢。很抱歉使用了错误的词。我的意思是如何在调用ShowDialog后卸载窗口。关于vm==null的情况,你是对的。这不应该发生。我只是出于安全考虑才加上它。