2013-09-05 3 views
0

뷰 모델 클래스 A가 있으며 속성 "a"가 있습니다.다른 뷰 모델에서 하나의 뷰 모델로 변경된 속성을 캡처하는 방법

그리고 나는 B라고 불리는 클래스를 가지고 있으며, 그것은 모든 A []의리스트를리스트로 저장하는 "b"의 특성입니다.

호텔 A의 변화가 나는 상위 클래스 A.

클래스 B {

속성 B1이다

의 속성을 변경하고 싶은 경우

;

에서 A []

}

급 {

속성 (A1);

} 내가 MVVM을 사용하고 재산 chnaged 이벤트를 통지하고

두 장소에있다. 나는 둘 다 묶는 방법을 모른다. ObservableCollection<T>를 확장 내 BaseCollection 클래스에서

+0

클래스 A의 모든 인스턴스의 속성 'a'가 변경되면 클래스 B에서 알림이 필요하다는 의미였습니까? – Nitin

+0

예. 나는 같은 것을 필요로한다. –

답변

0

, 나는 내가에 핸들러를 첨부 할 수 CollectionItemPropertyChangeddelegate 만든, 그래서 속성 값이 컬렉션에 어떤 항목에서 변경 한 때 나는 알림을받을 수 있습니다 :

public delegate void ItemPropertyChanged(T item, string propertyName); 

그런 다음 나는 delegate의 유형의 getter 및 setter 추가

public virtual ItemPropertyChanged CurrentItemPropertyChanged { get; set; } 

이를 달성하기를, 나는 핸들을 부착해야 각 항목의 PropertyChanged 이벤트에 R : 객체가 제거 될 때 나는 또한 핸들러를 제거해야

public BaseCollection(IEnumerable<T> collection) 
{ 
    foreach (T item in collection) Add(item); 
} 

public new void Add(T item) 
{ 
    item.PropertyChanged += Item_PropertyChanged; 
    base.Add(item); 
} 

:이 다음 수

private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
    if (CollectionItemPropertyChanged != null) CollectionItemPropertyChanged(
currentItem, e.PropertyName); 
} 

:

public new bool Remove(T item) 
{ 
    if (item == null) return false; 
    item.PropertyChanged -= Item_PropertyChanged; 
    return base.Remove(item); 
} 

그런 다음 Item_PropertyChanged 핸들러가 수업에 B처럼 사용하십시오 :

public List<A> Items 
{ 
    get { return items; } 
    set 
    { 
     items = value; 
     items.CollectionItemPropertyChanged += YourHandler; 
     NotifyPropertyChanged(Items); 
    } 
} 

그런 다음 핸들러 :

private void YourHandler(A item, string propertyName) 
{ 
    // propertyName is the name of the changed property from the A object named item 
} 

더 직접 질문에 대답하기 위해, 당신은 다른이 delegate 하나 개의 뷰 모델에서 핸들러를 첨부 할 수 있습니다 ...예를 들면 :

Items.CollectionItemPropertyChanged += ViewModel2.YourHandler; 

또는 다른 뷰 모델

:

ViewModel1.Items.CollectionItemPropertyChanged += YourHandler; 
-1

는 싱글로보기 모델를 작성하고 해당 인스턴스를 사용하여 속성을 업데이트합니다.