Могу ли я обработать выданные исключения в XAML? - PullRequest
4 голосов
/ 05 мая 2009

В моем XAML я получаю всех клиентов, привязываясь к свойству GetAll:

<ListBox ItemsSource="{Binding GetAll}" 
     ItemTemplate="{StaticResource allCustomersDataTemplate}"
     Style="{StaticResource allCustomersListBox}">
</ListBox>

Свойство GetAll является наблюдаемой коллекцией в моей модели представления, которая вызывает Модель для получения всей коллекции клиентов:

public class CustomersViewModel
{
    public ObservableCollection<Customer> GetAll {
        get
        {
            try
            {
                return Customer.GetAll;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
    }
}

Если что-то идет не так в модели (плохо сформированный XML-файл и т. Д.), Тогда исключение всплывает до самого свойства GetAll в ViewModel.

Первый вопрос: Я был удивлен, что XAML, похоже, ничего не делает, за исключением и просто идет вперед и ничего не отображает. Это по замыслу? Является ли это частью «подхода развязки»?

Второй вопрос: Это заставляет меня задуматься Я мог бы как-то обработать исключение в XAML , например

Псевдокод:

<Trigger>
    <Trigger.OnException>
        <TextBox Text="The customer data could not be loaded."/>
    </Trigger.OnException>
</Trigger>

Возможно ли что-то подобное приведенному выше коду?

Ответы [ 4 ]

5 голосов
/ 05 мая 2009

Во-первых, я бы предположил, что не предполагается, что исключения XAML должны быть перехвачены. Они существуют скорее как инструмент, помогающий разработчику понять, как им нужно исправить свой код XAML, хотя они, конечно, должны происходить во время выполнения (инициализации) из-за динамической природы разметки XAML

Сказав это, вы можете довольно легко обработать исключения XAML, поместив вызов в InitializeComponents внутри конструктора вашего Windows класса. Затем вы можете перехватить все исключения или, в частности, XamlParseException, в зависимости от того, что вам подходит.

Пример из этого блога :

public partial class Window1 : System.Windows.Window 
{
    public Window1()
    {
        try
        {
            InitializeComponent();
        }
        catch (Exception ex)
        {
            // Log error (including InnerExceptions!)
            // Handle exception
        }
    }
}
2 голосов
/ 05 мая 2009

Вы можете использовать FallBackValue , чтобы предоставить значение для использования в привязке в случае возникновения ошибки. Кроме использования FallBackValue вы не можете обрабатывать исключения в xaml.

Возможно, вы также захотите взглянуть на TargetNullValue , в котором определенное значение равно Null (например, если вы установите TargetNullValue = 5 и ваш пользователь введет 5, ваш установщик получит Null, а если ваш получатель предоставит Null привязка будет отображаться 5).

1 голос
/ 05 мая 2009

Сначала я подумал, что вы можете использовать ValueConverter, проверить value==null, а затем установить произвольное свойство модели представления через параметр конвертера. Затем вы можете использовать обычный триггер свойства в xaml, чтобы показать ошибку.

Я почти уверен, что вы могли бы сделать это и с помощью валидатора привязки, поэтому я бы посмотрел там сначала.

РЕДАКТИРОВАТЬ: Да, взгляните на http://msdn.microsoft.com/en-us/library/ms753962.aspx для вступления к обязательным правилам проверки, .., что приведет вас на правильный путь

0 голосов
/ 15 ноября 2016

Да, вы можете обрабатывать исключения, используя XAML. Он существует для необработанных исключений. Эта ссылка может помочь .. http://www.wpf -tutorial.com / МОФ-приложения / обработка-исключение /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...