다음과 같이 제네릭 형식 T가있는 데이터 소스가 있습니다. 내가 UI의 변화를 보여줄 필요로일반 클래스 T에 대해 Inotifypropertychanged를 구현하는 방법?
public class GridObjectDataSource<T>
{
}
T는 우리가 일반 클래스 T.의 모든 속성 변경에 대한 위 클래스에서 구현할 수에서 INotifyPropertyChanged가 구현되지 않은 외부 클라이언트에서오고있다.
다음과 같이 제네릭 형식 T가있는 데이터 소스가 있습니다. 내가 UI의 변화를 보여줄 필요로일반 클래스 T에 대해 Inotifypropertychanged를 구현하는 방법?
public class GridObjectDataSource<T>
{
}
T는 우리가 일반 클래스 T.의 모든 속성 변경에 대한 위 클래스에서 구현할 수에서 INotifyPropertyChanged가 구현되지 않은 외부 클라이언트에서오고있다.
단순히 구현해야 이벤트 정의로 예 당신은 당신의 제네릭 클래스에 그것을 구현할 수 있습니다
public class MyClass<T> : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
}
대리자를 들어 그 속성은 속성 이름과 이벤트를 발생시키는 개체에 대한 인스턴스 참조보다 더 특별한 것을 요구하지 않습니다. 거기에는 제네릭 마법이 필요하지 않습니다.
귀하의 소비 클래스는 단순히 그것으로 연결할 수 있습니다 :
var instanceOfMyClass = new MyClass<SomeObject>();
instanceOfMyClass.PropertyChanged += theHandlerForTheEvent;
... 또는 ...
instanceOfMyClass.PropertyChanged += (o, e) => { do something; };
당신이 GridObjectDataSource<T>
를 사용하는 경우 실제로 일을 할 것은 아주 좋은 패턴을하게 나타납니다 무엇 추상 기본 클래스 및 파생 클래스 (뷰 모델 등)는 T
의 실제 유형을 지정합니다.
public abstract class GridObjectDataSource<T> : INotifyPropertyChanged
{
public abstract void DoSomething(T someInput);
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
public class MySpecificViewModel : GridObjectDataSource<int>
{
public override void DoSomething(int someInput)
{
}
}
단순히 인터페이스를 구현해도 예상되는 동작을 자동으로 추가하지는 않습니다. 기본'T' 객체를 직접 변경하면'GridObjectDataSource
@Dirk 그렇습니다. 'T'자체가 속성이 변경된시기를 알고 싶다면'INotifyPropertyChanged'를 구현해야합니다. – slugster
T가 이미 INotifyPropertyChanged를 구현 한 경우 위의 코드는 필요하지 않습니다. becoz는 개체 자체 만 업데이트합니다 .. – user3355293
당신이 할 수있는 최선의 제약 조건을 정의하는 것입니다
public class GridObjectDataSource<T> where T : INotifyPropertyChanged
{
}
일반 클래스 T
을 변경하지 않으므로 일반 클래스에 대한 viewmodels을 작성해야합니다. 인터페이스가 공통 인 경우 하나의 뷰 모델 만 있으면됩니다. 모두 다르면 각 유형별로 하나의 뷰 모델을 가져야합니다.
MSDN Patterns - WPF Apps With The Model-View-ViewModel Design Pattern
가 확인하시기 바랍니다 참조 [이] (http://stackoverflow.com/questions/1315621/implementing-inotifypropertychanged-does-a-better-way-exist) 및 [이] (HTTP : // geekswithblogs.net/brians/archive/2010/07/27/inotifypropertychanged-with-less-code-using-generics-amp-reflection.aspx) 도움이 될 수도 있습니다 !!!! –