Лучший способ не показывать окно, если его конструктор класса DataContext выдает исключение

1

У меня есть Window с одной кнопкой, нажмите кнопку " NewWindow. NewWindow пуст (для простоты) и имеет объект NewWindowViewModel как DataContext. NewWindowViewModel вызывает метод (например, ExceptinMethod), который может по выбору NewWindowViewModel исключение. Я не хочу, чтобы показать NewWindow на всех, если ExceptinMethod throwns исключение, я хочу, чтобы показать некоторые MessageBox "окно не может быть показано бла-бла..", например.

Каков наилучший подход к достижению этого?

Окно:

<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();
    }
}
Теги:
wpf
exception
constructor
viewmodel

1 ответ

2
Лучший ответ

В вашем примере просто измените свой код следующим образом

 private void OpenNewWindow(Object sender, RoutedEventArgs e)
 {
     try
     {
         var window = new NewWindow();
         window.ShowDialog();
     }
     catch(Exception)
     {
         MessageBos.Show("Constructor failed");
     }
 }
  • 1
    Пожалуйста, рекомендуем бросить и поймать конкретное исключение
  • 0
    Приятно. Мне это нравится. Я использовал свой подход, а ты лучше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню