2011-02-22 4 views
0

둘 사이를 전환하는 사용자에 따라 항목의 '그리스어'또는 '영어'이름을 표시 할 수있는 항목의 목록이 필요합니다. 목록의 모든 항목은 INPC를 구현합니다.ObservableCollection 항목이 업데이트를 표시하지 않음

각 항목에는 GreekName 속성과 RomanName 속성이 있으므로 지금 사용하는 전략은 항목 DisplayName 속성을 변경하는 것입니다. 단위 테스트 및 로그 출력은 각 항목의 DisplayName이 변경되고 INPC를 실행하지만 목록이 업데이트되지 않음을 나타냅니다.

목록은 ObservableCollection입니다. 해시 코드가 변경되지 않기 때문에 이것이 업데이트되지 않으면 궁금합니다. 목록에있는 항목을 새 항목으로 바꿀 수있는 유일한 방법일까요?

아래의 일부 코드 ...

건배,
Berryl

public class MasterViewModel : ViewModelBase 
{ 

    public ObservableCollection<DetailVm> AllDetailVms 
    { 
     get { return _allDetailVms; } 
    } 
    private readonly ObservableCollection<DetailVm> _allDetailVms; 

    void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { 
     if (e.NewItems != null && e.NewItems.Count != 0) 
      foreach (DetailVm vm in e.NewItems) vm.PropertyChanged += OnGreekGodChanged; 

     if (e.OldItems != null && e.OldItems.Count != 0) 
      foreach (DetailVm vm in e.OldItems) vm.PropertyChanged -= OnGreekGodChanged; 
    } 

    private void OnGreekGodChanged(object sender, PropertyChangedEventArgs e) 
    { 
     var detailVm = (DetailVm)sender; 

     // if DisplayName has changed we want to refresh the view & its filter 
     var displayName = ExprHelper.GetPropertyName<DetailVm>(x => x.DisplayName); 
     if (e.PropertyName == displayName) 
      Log.Info("'{0} reports it's display name has changed", detailVm.DisplayName); 
    } 


    private void _flipGreekOrRomanDisplay(string newName, Func<DetailVm, string> property) 
    { 
     foreach (var detailVm in _allDetailVms) 
     { 
      Log.Info("To '{0}', before change: '{1}'", newName, detailVm.DisplayName); 
      detailVm.DisplayName = property(detailVm); 
      Log.Info("To '{0}', after change: '{1}'", newName, detailVm.DisplayName); 
     } 
     NameFilterLabelText = newName; 
     NotifyOfPropertyChange(() => NameFilterLabelText); 

     NotifyOfPropertyChange(() => UseGreekName); 
     NotifyOfPropertyChange(() => UseRomanName); 
    } 

} 

답변

0

내 바보 같은 - 내 데이터 바인딩이 꺼져 있었다. 코드는 괜찮 았고 예상대로 INPC를 발사하는 아이템 덕분에 뷰 업데이트가 업데이트되었습니다.

관련 문제