2016-05-01 2 views
0

У меня есть этот ViewModel с IDataErrorInfo:MetroWindow проверка текстового поля данных

string _name; 
public string name 
{ 
    get { return this._name; } 
    set 
    { 
     if (Equals(value, _name)) 
     { 
      return; 
     } 
     _name= value; 
     RaisePropertyChanged("Name"); 
    } 
} 

private static readonly string[] ValidatedProperties = {"Name"}; 
public event PropertyChangedEventHandler PropertyChanged; 

protected virtual void RaisePropertyChanged(string propertyName) 
{ 
    if (PropertyChanged != null) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

private string GetValidationError(string propertyName) 
{ 
    string error = null; 
    switch (propertyName) 
    { 
      case "Name": 
      if (this.Name == String.Empty) 
      { 
       return "Please enter a name"; 
      } 
      break; 
    } 
    return error; 
} 

public string this[string columnName] 
{ 
    get { return GetValidationError(columnName); } 
} 

public bool IsValid 
{ 
    get 
    { 
     foreach (string property in ValidatedProperties) 
     { 
      if (GetValidationError(property) != null) 
      { 
       return false; 
      } 
     } 
     return true; 
    } 
} 

public string Error { get { return string.Empty; } } 

Первоначальная проверка была целое число < 10, я просто изменил все в строку и сделали что-то неправильно, так как проверка имени не работает, и я не вижу проблемы. В текстовом поле:

<TextBox 
     Name="tekstas" 
     Controls:TextBoxHelper.Watermark="Please enter a name" 
     Text="{Binding Name, 
     ValidatesOnDataErrors=True, 
     UpdateSourceTrigger=PropertyChanged, 
     NotifyOnValidationError=True}" 
     Margin="104,197,47,104" /> 

В чем проблема?

ответ

0

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

private string GetValidationError(string propertyName) 
{ 
    string error = null; 
    switch (propertyName) 
    { 
      case "Name": 
      if (this.Name == String.Empty) 
      { 
       return "Please enter a name"; 
      } 
      break; 

      default: 
      error = "some text"; 
      break; 
    } 
return error; 
} 
Смежные вопросы