2017-05-14 11 views
0

WPF 응용 프로그램 (MVVM)을 개발 중입니다. 나는 별도의 어셈블리 (Odata V4 Generated Proxy Class) 클래스를 가지고있다.WPF 응용 프로그램에서 IDataErrorInfo 또는 INotifyDataErrorInfo 구현의 제한

public partial class Book : BaseEntityType, INotifyPropertyChanged 
{ 
    public string Title{get;set;} 
    ... 
} 

는 지금은 IDataErrorInfo 또는 INotifyDataErrorInfo 인터페이스를 사용하여 특성을 검증하기 위해, 데이터 주석이 클래스의 속성을 장식 할 필요가있다. 예 :

[Required] 
public string Title{get;set;} 

문제점 :이 클래스는 별도의 어셈블리에

같이, I가 부분적인 클래스를 생성 할 수 없다. 이 클래스의 속성은 응용 프로그램의 UI 요소에 바인딩됩니다. 이제는 사용자 입력 데이터가있을 때 속성의 유효성을 검사해야합니다.

솔루션을 설계하는 데 어려움을 겪고 있습니다. 아무도 내가 이것을 습득하도록 도울 수 있습니까?

+0

데이터 개체에 바인딩 할 INotifyPropertyChanged를 구현하고 유효성 검사 논리를 가질 수있는 래퍼를 사용할 수 있습니다. 데이터 개체는 계속 저장해야하지만 래퍼 개체를 저장할 위치가 있어야합니다. – Mishka

+0

@Mishka, 코드 예제를 제공해 주시면 대단히 감사하겠습니다. – Rahul

답변

0

래퍼는 다음과 같습니다

public class BookWrapper : INotifyPropertyChanged, IDataErrorInfo 
{ 
    private Book _book; 
    public Book Book 
    { 
     get 
     { 
     return _book; 
     } 
     set 
     { 
     _book-value; 
     NotifyPropertyChanged("Book"); 
     } 
    } 
    public string Error 
    { 
     get { return String.Empty; } 
    } 
    public string this[string columnName] 
    { 
     get 
     { 
      String errorMessage = String.Empty; 
      switch (columnName) 
      { 
       case "Book": 
        if (Book.IsValid==false) 
        { 
         errorMessage = "Book not valid"; 
        } 
        break; 
      } 
      return errorMessage; 
     } 
    } 
    INotifyPropertyChanged Implementation... 
} 

당신이 당신의 데이터 객체 (책)로 난장판을하지 않는이 방법과 불필요한 인터페이스 쓰레기를 해달라고.