Проверка данных в wpf - PullRequest
       2

Проверка данных в wpf

5 голосов
/ 21 июня 2011

в моем коде у меня есть это:

class Data
{
    private int valore;
    public int Valore
    {
        get 
        {
            return valore;
        }
        set
        {
            if (value > 10 || value < 0)
            {
                throw new ArgumentException("Insert a value between 0 and 10");
            }                    
            valore = value;                
        }
    }
}

Тогда я:

Data dati = new Data { Valore = 6 };

    public MainWindow()
    {
        InitializeComponent();                      

        this.DataContext = dati;
    }

и в XAML я:

<TextBox Height="23" Width="120" Text="{Binding Path=Valore, Mode=TwoWay, ValidatesOnExceptions=True}"

Проблема в том, что когда я вставляю значение больше 10, я не вижу красной рамки вокруг TextBox, но вместо этого мое приложение выдает необработанное исключение.

Ответы [ 5 ]

1 голос
/ 21 июня 2011

Для DataValidatation вам необходимо сделать следующее:

  1. Реализация System.ComponentModel.IDataErrorInfo в классе данных

  2. Вам необходимо добавить ValidationRule в вашу привязку

1 голос
/ 21 июня 2011

Проверка MSDN WPF

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

0 голосов
/ 21 июня 2011

Есть много способов выполнить проверку.Если вы используете MVVM, то, вероятно, IDataErrorInfo - путь.

Я бы связал это с FluentValidation , чтобы упростить вещи.

0 голосов
/ 21 июня 2011

Используйте свойство ValidationRules для привязки текста

 <TextBox>
<TextBox.Text>
    <Binding Path=Valore, Mode=TwoWay>
        <Binding.ValidationRules>
            <ExceptionValidationRule />
        </Binding.ValidationRules>
    </Binding>
</TextBox.Text>

если вы введете неправильное значение, граница вашего текстового поля станет красной

0 голосов
/ 21 июня 2011

Отладчик, похоже, игнорирует тот факт, что сгенерированное здесь исключение фактически перехватывается механизмом привязки. Когда вы запускаете свою программу вне Visual Studio, вы должны получить желаемое поведение.

Чтобы избежать перерыва в отладчике при проверке, вы можете использовать

public int Valore
{
    get { //... }
    [System.Diagnostics.DebuggerStepThrough()]
    set { //... }
}

Или, что еще лучше, не используйте исключения для проверки данных, но посмотрите на интерфейс IDataErrorInfo . В конце концов, неверный пользовательский ввод не исключение, а норма. =)

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