Как подписать и передать измененное коллекцию событие наблюдаемой коллекции ребенка? - PullRequest
0 голосов
/ 12 мая 2019

У меня есть ViewModel, обертывающий экземпляр объекта модели и действующий как интерфейс между моделью и представлением. В моем случае модель имеет коллекцию, которую я подключаю к представлению с наблюдаемой коллекцией в модели представления.

Например:


    public class NotificationBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected bool SetField<T>(ref T field, T value, [CallerMemberName] String fieldName = null)
        {
            if (EqualityComparer<T>.Default.Equals(field, value)) return false;
            field = value;
            RaiseChangedEvent(fieldName);
            return true;
        }

        protected T SetProperty<T>(T property, T value, [CallerMemberName] String propertyName = null)
        {
            if (!EqualityComparer<T>.Default.Equals(property, value)) RaiseChangedEvent(propertyName);
            return value;
        }

        protected void RaiseChangedEvent(string changedObjectName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(changedObjectName));
        }
    }

    public class ViewModel : NotificationBase
    {
        public ViewModel(ref Model model)
        {
            _model = model ?? throw new ArgumentNullException("Model cannot be null");
        }

        public ObservableCollection<Thing> ViewModelCollection
        {
            get { return _model.ModelCollection; }
            set { _model.ModelCollection = SetProperty(_model.ModelCollection, value); }
        }

        private Model _model { get; set; }
    }

Мой вопрос: как мне узнать, когда _model.Collection и, таким образом, ViewModelCollection изменены?

Примечание: Model.Collection на самом деле ObservableCollection, но я не знаю, как передать событие CollectionChanged вместе с ViewModel, а затем с View.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...