Я действительно новичок во всей этой вещи WPF, поэтому моя проблема, вероятно, глупо, но, пожалуйста, у меня есть... У меня есть этот действительно простой класс, позвольте назвать его Заказчиком. Это выглядит так:
namespace TestValidation
{
class Customer
{
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
if (String.IsNullOrEmpty(value))
{
throw new Exception("Customer name is mandatory.");
}
}
}
}
}
Теперь я создал базовую форму, в которой пользователь может добавлять клиентов в базу данных. Форма содержит простой TextBox, ограниченный свойством Name клиента и кнопку "Добавить".
Код XAML:
<Window x:Class="TestValidation.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestValidation"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox Margin="119,86,107,194" Name="CustomerName"
Text="{Binding Path=Customer.Name,
ValidatesOnExceptions=True,
ValidatesOnDataErrors=True,
UpdateSourceTrigger=PropertyChanged,
NotifyOnValidationError=True}"
/>
<Button Content="Add" HorizontalAlignment="Left" Margin="204,176,0,0" VerticalAlignment="Top" Width="74"/>
</Grid>
</Window>
Из атрибута свойства Name вы можете понять, что это имя является обязательным для меня, поэтому я хочу, чтобы событие проверки возрастало, если текстовое поле Name осталось без пробела. По правилам проверки WPF - как только пользователь сосредоточится на текстовом поле, и там нет никакой ценности - он должен изменить цвет границы на красный. По какой-то причине это не происходит, и я не знаю, почему. Что не так в моем процессе?
Теперь я прочитал так много хороших статей о Validation в WPF (например, Принятие правил сложных бизнес-данных с WPF, Проверка данных в WPF и Проверка в Windows Presentation Foundation), но ни один из них не помог мне решить мою проблему.
В конце концов, я хочу, чтобы форма была похожа на форму в Brian Noyes, отличная статья по первой ссылке (у меня нет 10 кредитов, поэтому я не могу прикрепить фотографию... извините).
Буду признателен, если кто-нибудь сможет объяснить мне, как это работает.
Важное примечание. Я работаю с .Net framework 4, поэтому мне нужно решение, которое подходит для этой версии.