コード例 #1
0
        public MultiViewModel()
        {
            var collection = new SynchronizedNotifiableCollection <TViewModel>();
            var list       = ToolkitServiceProvider.TryDecorate(this, collection);

            Should.BeOfType <INotifiableCollection <TViewModel> >(list, "DecoratedItemsSource");
            _itemsSource = (INotifiableCollection <TViewModel>)list;
            collection.AfterCollectionChanged = OnViewModelsChanged;
            _propertyChangedWeakEventHandler  = ReflectionExtensions.MakeWeakPropertyChangedHandler(this, (model, o, arg3) => model.OnItemPropertyChanged(o, arg3));
            var weakReference = ToolkitExtensions.GetWeakReference(this);

            _closeViewModelWeakHandler = (dispatcher, vm, arg3) =>
            {
                var self = (MultiViewModel <TViewModel>)weakReference.Target;
                return(self?.CloseViewModel(dispatcher, vm, arg3) ?? Empty.FalseTask);
            };
            DisposeViewModelOnRemove = ApplicationSettings.MultiViewModelDisposeViewModelOnRemove;
            CloseViewModelsOnClose   = ApplicationSettings.MultiViewModelCloseViewModelsOnClose;
        }
コード例 #2
0
        public void SetOriginalItemsSource <TItemsSource>(TItemsSource originalItemsSource)
            where TItemsSource : IList <T>, INotifyCollectionChanged, IList
        {
            EnsureNotDisposed();
            Should.NotBeNull(originalItemsSource, nameof(originalItemsSource));
            INotifyCollectionChanging collectionChanging;

            if (_originalData != null)
            {
                collectionChanging = _originalData as INotifyCollectionChanging;
                if (collectionChanging != null)
                {
                    collectionChanging.CollectionChanging -= RaiseCollectionChanging;
                }
                ((INotifyCollectionChanged)_originalData).CollectionChanged -= RaiseCollectionChanged;
                if (_originalData.Count != 0)
                {
                    originalItemsSource.AddRange(_originalData, true);
                }
            }
            _filterableItemsSource = new FilterableNotifiableCollection <T>(originalItemsSource);
            collectionChanging     = originalItemsSource as INotifyCollectionChanging;
            if (collectionChanging != null)
            {
                collectionChanging.CollectionChanging += RaiseCollectionChanging;
            }
            originalItemsSource.CollectionChanged += RaiseCollectionChanged;

            _originalData = originalItemsSource;
            var list = ToolkitServiceProvider.TryDecorate(this, FilterableItemsSource);

            Should.BeOfType <INotifiableCollection <T> >(list, "DecoratedItemsSource");
            _itemsSource = (INotifiableCollection <T>)list;
            UpdateFilter();
            OnPropertyChanged(nameof(ItemsSource));
            OnPropertyChanged(nameof(OriginalItemsSource));
            RaiseItemsSourceChanged(_itemsSource);
        }