C# 若窗口的DataContext类构造函数引发异常,则最好不要显示该窗口

C# 若窗口的DataContext类构造函数引发异常,则最好不要显示该窗口,c#,wpf,exception,constructor,viewmodel,C#,Wpf,Exception,Constructor,Viewmodel,我有一个按钮的窗口,点击按钮打开新窗口NewWindow为空(为简单起见),对象为DataContextNewWindowViewModel构造函数调用一个方法(例如,ExceptionMethod),该方法可以选择抛出异常。我根本不想显示新窗口如果异常方法出现异常,我想显示一些消息框“窗口无法显示bla bla..” 实现这一目标的最佳途径是什么 窗口: <Grid> <Button Click="OpenNewWindow">Open new window&l

我有一个按钮的
窗口
,点击按钮打开
新窗口
NewWindow
为空(为简单起见),对象为
DataContext
NewWindowViewModel
构造函数调用一个方法(例如,
ExceptionMethod
),该方法可以选择抛出异常。我根本不想显示
新窗口
如果
异常方法
出现异常,我想显示一些
消息框
“窗口无法显示bla bla..”

实现这一目标的最佳途径是什么

窗口:

<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();
    }
}
NewWindowViewModel:

public class NewWindowViewModel
{
    public NewWindowViewModel()
    {
        ExceptinMethod();
    }

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

在您的示例中,只需按如下方式更改代码

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

请推荐投掷和捕捉一个特殊的例外尼斯。我喜欢。我用我自己的方法,你的方法更好。
 private void OpenNewWindow(Object sender, RoutedEventArgs e)
 {
     try
     {
         var window = new NewWindow();
         window.ShowDialog();
     }
     catch(Exception)
     {
         MessageBos.Show("Constructor failed");
     }
 }