Уведомление коллекции ObservableCollection об изменении элемента

Я нашел по этой ссылке

ObservableCollection noticing when Item in it changes (even with INotifyPropertyChanged)

некоторые методы уведомления Observablecollection о том, что элемент изменился. TrulyObservableCollection в этой ссылке кажется тем, что я ищу.

public class TrulyObservableCollection : ObservableCollection
where T : INotifyPropertyChanged
{
    public TrulyObservableCollection()
    : base()
    {
        CollectionChanged += new NotifyCollectionChangedEventHandler(TrulyObservableCollection_CollectionChanged);
    }

    void TrulyObservableCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
        if (e.NewItems != null)
        {
            foreach (Object item in e.NewItems)
            {
                (item as INotifyPropertyChanged).PropertyChanged += new PropertyChangedEventHandler(item_PropertyChanged);
            }
        }
        if (e.OldItems != null)
        {
            foreach (Object item in e.OldItems)
            {
                (item as INotifyPropertyChanged).PropertyChanged -= new PropertyChangedEventHandler(item_PropertyChanged);
            }
        }
    }

    void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        NotifyCollectionChangedEventArgs a = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset);
        OnCollectionChanged(a);
    }
}

Но когда я пытаюсь ее использовать, я не получаю уведомлений на коллекцию. Я не уверен, как правильно реализовать это в моем коде C#:

XAML :

    
        
            
        
    

ViewModel :

public class MyViewModel : ViewModelBase
{
    private TrulyObservableCollection myItemsSource;
    public TrulyObservableCollection MyItemsSource
    {
        get { return myItemsSource; }
        set 
        { 
            myItemsSource = value; 
            // Code to trig on item change...
            RaisePropertyChangedEvent("MyItemsSource");
        }
    }

    public MyViewModel()
    {
        MyItemsSource = new TrulyObservableCollection()
        { 
            new MyType() { MyProperty = false },
            new MyType() { MyProperty = true },
            new MyType() { MyProperty = false }
        };
    }
}

public class MyType : ViewModelBase
{
    private bool myProperty;
    public bool MyProperty
    {
        get { return myProperty; }
        set 
        {
            myProperty = value;
            RaisePropertyChangedEvent("MyProperty");
        }
    }
}

public class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChangedEvent(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChangedEventArgs e = new PropertyChangedEventArgs(propertyName);
            PropertyChanged(this, e);
        }
    }
}

Когда я запускаю программу, у меня 3 флажка имеют значения false, true, false, как в инициализации свойства. но когда я меняю состояние одного из чекбоксов, программа проходит через item_PropertyChanged, но никогда в коде свойства MyItemsSource.

39
задан Guillaume RAYMOND 5 April 2018 в 12:22
поделиться