, 나는 내가에 핸들러를 첨부 할 수 CollectionItemPropertyChanged
delegate
만든, 그래서 속성 값이 컬렉션에 어떤 항목에서 변경 한 때 나는 알림을받을 수 있습니다 :
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;
클래스 A의 모든 인스턴스의 속성 'a'가 변경되면 클래스 B에서 알림이 필요하다는 의미였습니까? – Nitin
예. 나는 같은 것을 필요로한다. –