若窗口的DataContext类构造函数抛出异常,则不显示窗口的最佳方式

本文关键字:窗口 显示 方式 最佳 抛出异常 DataContext 构造函数 | 更新日期: 2023-09-27 18:20:08

我有一个按钮的Window,点击按钮打开NewWindowNewWindow是空的(为了简单起见)并且具有作为DataContextNewWindowViewModel对象。NewWindowViewModel构造函数调用一个方法(例如ExceptinMethod),该方法可以选择性地抛出异常。如果ExceptinMethod引发异常,我根本不想显示NewWindow,例如,我想显示一些MessageBox"窗口无法显示blabla.."。

实现这一目标的最佳方法是什么?

窗口:

<Grid>
    <Button Click="OpenNewWindow">Open new window</Button>
</Grid>
public partial class Window1
{
    public Window1()
    {
        InitializeComponent();
    }
    private void OpenNewWindow(Object sender, RoutedEventArgs e)
    {
        var window = new NewWindow();
        window.ShowDialog();
    }
}

新窗口:

public NewWindow()
{
    InitializeComponent();
    DataContext = new NewWindowViewModel();
}

NewWindowViewModel:

public class NewWindowViewModel
{
    public NewWindowViewModel()
    {
        ExceptinMethod();
    }
    private void ExceptinMethod()
    {
        // in fact optionally!
        throw new Exception();
    }
}

若窗口的DataContext类构造函数抛出异常,则不显示窗口的最佳方式

在您的示例中,只需按照以下更改代码

 private void OpenNewWindow(Object sender, RoutedEventArgs e)
 {
     try
     {
         var window = new NewWindow();
         window.ShowDialog();
     }
     catch(Exception)
     {
         MessageBos.Show("Constructor failed");
     }
 }