internal TreeViewItemViewModel(TreeViewItemModel item) { Model = item; Title = item .ObserveProperty(x => x.Title) .ToReadOnlyReactivePropertySlim() .AddTo(disposable); Tag = item .ObserveProperty(x => x.Tag) .ToReadOnlyReactivePropertySlim() .AddTo(disposable); Children = item.Children .ToReadOnlyReactiveCollection(x => new TreeViewItemViewModel(x)) .AddTo(disposable); new[] { Children.CollectionChangedAsObservable().OfType <object>(), Children.ObserveElementObservableProperty(x => x.Title).OfType <object>(), Children.ObserveElementObservableProperty(x => x.Tag).OfType <object>(), Children.ObserveElementProperty(x => x.Children).OfType <object>() } .Merge() .Subscribe(_ => OnPropertyChanged(new PropertyChangedEventArgs(nameof(Children)))) .AddTo(disposable); }