Как вы решили выполнять проверку данных / элементов управления в своих приложениях Silverlight?
Как вы выполняете проверку в Silverlight?
Ответы (5)
Вы можете генерировать и фиксировать исключения проверки данных.
Чтобы справиться с обоими этими типами ошибок, необходимо предпринять 3 шага:
- Определите обработчик ошибок в элементе управления или выше в иерархии видимости (например, контейнер; в данном случае сетка, содержащая текстовое поле)
- Установите для NotifyOnValidationError и ValidateOnException значение true. Последний сообщает механизму привязки создать событие ошибки проверки при возникновении исключения. Первый сообщает механизму привязки вызвать событие BindingValidationError при возникновении ошибки проверки.
- Создайте обработчик событий, названный на шаге 1.
Взято из здесь.
Образец кода:
// page.xaml.cs
private bool clean = true;
private void LayoutRoot_BindingValidationError(
object sender, ValidationErrorEventArgs e )
{
if ( e.Action == ValidationErrorEventAction.Added )
{
QuantityOnHand.Background = new SolidColorBrush( Colors.Red );
clean = false;
}
else if ( e.Action == ValidationErrorEventAction.Removed )
{
QuantityOnHand.Background = new SolidColorBrush( Colors.White );
clean = true;
}
}
// page.xaml
<Grid x:Name="LayoutRoot" Background="White" BindingValidationError="LayoutRoot_BindingValidationError" >
<TextBox x:Name="QuantityOnHand"
Text="{Binding Mode=TwoWay, Path=QuantityOnHand,
NotifyOnValidationError=true, ValidatesOnExceptions=true }"
VerticalAlignment="Bottom"
HorizontalAlignment="Left"
Height="30" Width="90"red
Grid.Row="4" Grid.Column="1" />
// book.cs
public int QuantityOnHand
{
get { return quantityOnHand; }
set
{
if ( value < 0 )
{
throw new Exception( "Quantity on hand cannot be negative!" );
}
quantityOnHand = value;
NotifyPropertyChanged( "QuantityOnHand" );
} // end set
}
Лично я еще не делал много из этого, но некоторые хорошие отправные точки здесь. Я предполагаю, что они появятся как часть будущего выпуска, но сейчас нам, вероятно, придется развернуть наши собственные, используя валидаторы ASP.NET в качестве отправной точки.
Если у вас возникли проблемы при попытке реализовать это, то это не потому, что ваш код сломан, а потому, что функция не работает в DataGrid. Ознакомьтесь со статьей Джесси Либерти здесь.
Исходный код очень простого элемента управления валидацией находится в этом месте:
http://silverlightvalidator.codeplex.com/SourceControl/changeset/view/20754# а>
Ниже приведены условия, при которых он работает. 1. Индикатор, показывающий недопустимые значения, предполагает положение элемента управления для проверки, поэтому элементы управления должны быть плотно упакованы в строку и столбец, чтобы он указывал рядом с элементом управления. 2. Это не работает для проверки в ChildWindow.
Мне пришлось изменить код, чтобы включить условия childwindow в класс validatorbase следующим образом:
Возможно, вы захотите взглянуть на PostSharp, он упрощает атрибуцию вашей клиентской модели данных.