Как вы выполняете проверку в Silverlight?

Как вы решили выполнять проверку данных / элементов управления в своих приложениях Silverlight?


person Aaron Fischer    schedule 09.10.2008    source источник


Ответы (5)


Вы можете генерировать и фиксировать исключения проверки данных.

Чтобы справиться с обоими этими типами ошибок, необходимо предпринять 3 шага:

  1. Определите обработчик ошибок в элементе управления или выше в иерархии видимости (например, контейнер; в данном случае сетка, содержащая текстовое поле)
  2. Установите для NotifyOnValidationError и ValidateOnException значение true. Последний сообщает механизму привязки создать событие ошибки проверки при возникновении исключения. Первый сообщает механизму привязки вызвать событие BindingValidationError при возникновении ошибки проверки.
  3. Создайте обработчик событий, названный на шаге 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
}
person Yuval Peled    schedule 13.10.2008
comment
Я ожидал увидеть, какой элемент управления вызвал исключение в ValidationErrorEventArgs (msdn.microsoft.com/en-us/library/). Поэтому я переместил событие BindingValidationError из Grid в текстовые поля, которые могут вызвать исключение. Таким образом, я могу проверить, какой элемент управления вызвал исключение в параметре отправителя. - person russau; 01.07.2009

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

person Bryant    schedule 09.10.2008

Если у вас возникли проблемы при попытке реализовать это, то это не потому, что ваш код сломан, а потому, что функция не работает в DataGrid. Ознакомьтесь со статьей Джесси Либерти здесь.

person Community    schedule 19.11.2008
comment
Правильная ссылка: jesseliberty.com/2008/10/22/ - person Lukas Cenovsky; 08.05.2010


Возможно, вы захотите взглянуть на PostSharp, он упрощает атрибуцию вашей клиентской модели данных.

person Craig Nicholson    schedule 19.10.2008
comment
Если вы предоставите пример того, как использовать PostSharp для помощи в проверке, я уберу голос против. - person Andrew Garrison; 04.01.2010