2014-11-27 3 views
0

MVVM 패턴을 사용하는 응용 프로그램이 있는데 사용자가 정보를 입력하면 유효성 검사를 구현하고 싶습니다. 예를 들어 min이 max보다 큰 경우 내보기에서 버튼을 사용하지 않으려합니다.모델에서 오류 발생시 ViewModel을 알리기

모델에 IDataErrorInfo를 구현했습니다. 여기 내 모델 :

public class MyModel : IDataErrorInfo, INotifyPropertyChanged 
{ 
    private string stock; 
    public string Stock 
    { 
     get { return stock; } 
     set { stock = value; } 
    } 

    private double min; 
    public double Min 
    { 
     get { return min; } 
     set { min = value; OnPropertyChange("Min"); } 
    } 

    private double max; 
    public double Max 
    { 
     get { return max; } 
     set { max = value; OnPropertyChange("Max"); } 
    } 

    public string Error 
    { 
     get { throw new NotImplementedException(); } 
    } 

    public string this[string columnName] 
    { 
     get 
     { 
      string error = string.Empty; 
      if (columnName == "Min" || columnName == "Max") 
      { 
       if (Min > Max) 
       { 
        error = "Min can't be greater than Max"; 
       } 
      } 
      return error; 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    public void OnPropertyChange(string name) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(name)); 
     } 
    } 
} 

그리고 내 뷰 모델은 (데이터 그리드에 바인딩) MyModel의 수집 및 CanUpdate라는 부울 속성이 있습니다. 이 CanUpdate는 내보기에서 업데이트 단추의 IsEnabled 속성에 바인딩됩니다.

public class MyViewModel : INotifyPropertyChanged 
{ 
    private ObservableCollection<MyModel> stocks; 
    public ObservableCollection<MyModel> Stocks 
    { 
     get { return stocks; } 
     set { stocks = value; } 
    } 

    private bool canUpdate = true; 
    public bool CanUpdate 
    { 
     get { return canUpdate; } 
     set { canUpdate = value; } 
    }   

    public MyViewModel() 
    { 
     AddStocks(); 
    } 

    public void AddStocks() 
    { 
     Stocks = new ObservableCollection<MyModel>(); 
     Stocks.Add(new MyModel() { Stock ="Stock 1", Min = 10, Max=20 }); 
     Stocks.Add(new MyModel() { Stock = "Stock 2", Min = 5, Max = 15 }); 
     Stocks.Add(new MyModel() { Stock = "Stock 3", Min = 6, Max = 25 }); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    public void OnPropertyChange(string name) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(name)); 
     } 
    } 

사용자는 DataGrid에서 최소값과 최대 값을 편집 할 수 있습니다. MyModel에서 발생한 오류가 MyViewModel의 CanUpdate 속성을 업데이트해야 할 때마다 편집 중입니다. 이것을 달성하도록 안내해주십시오.

답변

1

보기 모델에서 항목을 모음 후크에 PropertyChanged 이벤트로 추가 할 때. 처리기에서 Error 속성을 분석하고 이에 따라 CanUpdate을 수정하십시오.

관련 문제