Как узнать статус проверки пользовательского контроля Silverlight? - PullRequest
1 голос
/ 16 ноября 2010

У меня есть пользовательский контроль Silverlight с несколькими полями, которые связаны через службы RIA с базой данных.Я использую NotifyOnValidationError = true, ValidatesOnExceptions = true в этих полях и элемент управления ValidationSummary для отображения любых ошибок с полями.Это все работает нормально.

Однако в usercontrol у меня есть кнопка «Сохранить», которая при нажатии вызывает context.SubmitChanges ().Проблема в том, что на эту кнопку можно нажать (и, таким образом, вызвать SubmitChanges), даже если все еще присутствуют ошибки.

Как определить, все еще присутствуют ошибки проверки или есть ли в любом случае привязка свойства IsEnabledкнопки Сохранить в статус проверки?

Ответы [ 2 ]

2 голосов
/ 17 ноября 2010

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

В вашем классе (код или модель представления) у вас будет нечто, предоставляющее текущий экземпляр объекта RIA, с которым вы работаете.

public SampleRIAEntity SelectedEntity { get; set; }

Используя этот метод расширения:

public static class RiaExtensions
{
  public static bool CheckValidation<T>( this T riaEntity ) where T : Entity
  {
    ValidationContext vc = new ValidationContext( riaEntity, null, null);
    ICollection<ValidationResult> validationResults = new List<ValidationResult>();
    return ( Validator.TryValidateObject( riaEntity, vc, validationResults ) == true );
  }
}

Вы можете предоставить свойство для использования с IsEnabled на кнопке Сохранить.

public bool HasErrors
{
  get
  {
    return SelectedEntity.CheckValidation<SampleRIAEntity>();
  }
}

После этого будут выполнены все правила проверки, доступные на стороне клиента. Сохранение все еще не может быть зафиксировано, если существуют серверные правила, которые не были выполнены.

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

Вы можете привязать свойство IsEnabled кнопки сохранения к полю HasErrors элемента управления ValidationSummary. Это отключит кнопку до тех пор, пока отображается сводка проверки. Вам нужно будет использовать конвертер, чтобы инвертировать значение HasErrors

Вот XAML:

    <UserControl .... > 
       <UserControl.Resources> 
           <Converters1:NotBoolConverter x:Key="NotBoolConverter" />
        </UserControl.Resources> 

        <Button IsEnabled="{Binding HasErrors, ElementName=valSummary, Converter={StaticResource NotBoolConverter}}" /> 

Вот код для NotBoolConverter: (от http://forums.silverlight.net/forums/p/78115/184444.aspx)

internal class NegationConverter : IValueConverter
{
    #region IValueConverter Members 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { var b = (bool) value; return !b; } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    { throw new NotImplementedException(); } 
    #endregion 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...