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的情况,你是对的。这不应该发生。我只是出于安全考虑才加上它。