2013-02-08 3 views
0

У меня есть два свойства [Say Size, StrVal] в моем классе viewmodel. Одним из ограничений является то, что длина StrVal должна быть меньше или равна размеру; Это ограничение применяется в индексаторе IDataErrorInfo.IDataErrorInfo Issue

public string this[string propertyName] 
    { 

     get 
     { 
      string msg = null; ; 
      switch (propertyName) 
      { 
       .... 

       case "StrVal": 
        { 
         if (this.StrVal.Length > this.SizeOfStringVal) 
         { 
          msg = "Size of entered value is greater than the size"; 
         } 
        } 
        break; 

       ......... 

      } 
      return msg; 
     } 
    } 

Теперь рассмотрим следующую ситуацию

Size = 5; 
StrVal = "ABCDEF" ; // length = 6 > Size 
"Error message is generated" 
Size = 7 // length of StrVal is less than 7 

Но визуально еще ситуация ошибка отображается, пока я программно не срабатывала PropertyChanged событие для свойства «StrVal». По этой причине я должен использовать следующий код.

public int? Size 
    { 
     get 
     { 
      return this.size; 
     } 
     set 
     { 
      if (value == this.Size) 
      { 
       return; 
      } 
      this.size = value; 
      this.OnPropertyChanged("StrVal"); 
     } 
    } 

Просьба сообщить, является ли это идеальным способом решения проблемы. С уважением, Anirban

+0

Является ли 'StrVal' привязанным к' TextBox'? Если это так, вы можете показать XAML? –

+0

Цель 4.5, реализовать [INotifyDataErrorInfo] (http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifydataerrorinfo (VS.95) .aspx), победить. – Will

ответ

4

Да, это путь IDataErrorInfo работы, он будет запрашивать только для ошибки проверки, когда уведомление об изменении свойств происходит. Так в идеале ваше Size свойство будет выглядеть следующим образом:

public int? Size 
{ 
    get 
    { 
     return this.size; 
    } 
    set 
    { 
     if (value == this.Size) 
     { 
      return; 
     } 
     this.size = value; 
     this.OnPropertyChanged("Size"); 
     this.OnPropertyChanged("StrVal"); 
    } 
} 

Даже если вы не можете делать какие-либо проверки на собственность размер, вы должны по-прежнему (как вопрос «лучшей практики») отправить уведомление об изменении свойства.