Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Aaron FischerОтветов: 5

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

silverlight

Ответы

Ответ 1 · рейтинг 4 · Yuval Peled

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

Чтобы справиться с обоими этими типами ошибок, необходимо предпринять 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
}

Ответ 2 · рейтинг 1 · Bryant

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

Ответ 3 · рейтинг 1 · Community

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

Ответ 4 · Pankaj Awasthi

Исходный код очень простого элемента управления валидацией находится в этом месте:

http://silverlightvalidator.codeplex.com/SourceControl/changeset/view/20754# а>

Ниже приведены условия, при которых он работает. 1. Индикатор, показывающий недопустимые значения, предполагает положение элемента управления для проверки, поэтому элементы управления должны быть плотно упакованы в строку и столбец, чтобы он указывал рядом с элементом управления. 2. Это не работает для проверки в ChildWindow.

Мне пришлось изменить код, чтобы включить условия childwindow в класс validatorbase следующим образом:

Ответ 5 · рейтинг -1 · Craig Nicholson

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы