컨트롤은 INotifyPropertyChanged
에만 수신되고 ICollectionChanged
에는 수신되지 않으므로 정상적인 동작입니다. 컬렉션 속성 자체는 변경되지 않으므로 컨트롤에서 새로 고침해야하는지 여부를 알 수 없습니다.
컬렉션 변경 내용을 컨트롤에 전달하려면 CollectionChanged
이벤트 (예 : ObservableCollection
)에 가입 한 다음 컬렉션이 변경되면 컬렉션 속성에 대한 속성 변경 이벤트를 발생시켜야합니다 (항목 추가, 제거, 이동 또는 콜렉션이 지워짐).
#region [BViewModelCollection]
/// <summary>
/// The <see cref="BViewModelCollection" /> property's name.
/// </summary>
public const string BViewModelCollectionPropertyName = "BViewModelCollection";
private ObservableCollection<BViewModel> _bViewModelCollection = new ObservableCollection<BViewModel>();
/// <summary>
/// Gets the BViewModelCollection property.
/// TODO Update documentation:
/// Changes to that property's value raise the PropertyChanged event.
/// This property's value is broadcasted by the Messenger's default instance when it changes.
/// </summary>
public ObservableCollection<BViewModel> BViewModelCollection {
get {
return _bViewModelCollection;
}
set {
if (_bViewModelCollection != value) {
SetBViewModelCollection(value);
RaisePropertyChanged(BViewModelCollectionPropertyName);
}
}
}
private void SetBViewModelCollection(ObservableCollection<BViewModel> value) {
if (_bViewModelCollection != null)
_bViewModelCollection.CollectionChanged -= this.BViewModelCollection_CollectionChanged;
_bViewModelCollection = value;
if (_bViewModelCollection != null)
_bViewModelCollection.CollectionChanged += this.BViewModelCollection_CollectionChanged;
}
private void BViewModelCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) {
RaisePropertyChanged(BViewModelCollectionPropertyName);
}
#endregion
는 이제 컬렉션의 PropertyChanged
이벤트를 발생하지 않고, 제대로 이벤트를 ObservableCollection
을 설정하고 자동으로 등록 할 SetBViewModelCollection
을 사용할 수 있습니다 - 예를 들어, 생성자 또는로드 데이터 메소드에서 사용합니다.
항목이 컬렉션에 추가되거나 컬렉션에서 제거되면 컨트롤에 컬렉션 속성이 변경되었음을 알려야합니다.
참고 : 메서드 이름을 사용자 고유의 프레임 워크로 조정하십시오.
빠른 응답을 보내 주셔서 감사합니다. 나는 그것을 밖으로 시도 할 것이다! – user1149223