Пример #1
0
            public void ReturnsFalseForNonPropertyChangedItem()
            {
                var model   = new object();
                var wrapper = new ChangeNotificationWrapper(model);

                Assert.IsFalse(wrapper.SupportsNotifyPropertyChanged);
            }
Пример #2
0
            public void ReturnsTrueForCollectionChangedItem()
            {
                var collection = new ObservableCollection <int>();
                var wrapper    = new ChangeNotificationWrapper(collection);

                Assert.IsTrue(wrapper.SupportsNotifyCollectionChanged);
            }
Пример #3
0
            public void HandlesClearOfSuspendedFastObservableCollectionCorrectly()
            {
                var collection = new FastObservableCollection <TestModel>
                {
                    AutomaticallyDispatchChangeNotifications = false
                };

                TestModel model = null;

                for (var i = 0; i < 10; i++)
                {
                    var randomModel = new TestModel();
                    collection.Add(randomModel);
                }

                model = collection[0];

                var wrapper = new ChangeNotificationWrapper(collection);

                var collectionItemPropertyChanged = false;

                wrapper.CollectionItemPropertyChanged += (sender, e) => collectionItemPropertyChanged = true;

                using (collection.SuspendChangeNotifications())
                {
                    collection.Clear();
                }

                model.FirstName = "Geert";

                Assert.IsFalse(collectionItemPropertyChanged);
            }
Пример #4
0
            public void ReturnsTrueForPropertyChangedItem()
            {
                var model   = new TestModel();
                var wrapper = new ChangeNotificationWrapper(model);

                Assert.IsTrue(wrapper.SupportsNotifyPropertyChanged);
            }
Пример #5
0
            public void HandlesChangesOfSuspendedFastObservableCollectionCorrectly()
            {
                var collection = new FastObservableCollection <TestModel>
                {
                    AutomaticallyDispatchChangeNotifications = false
                };

                for (var i = 0; i < 10; i++)
                {
                    var randomModel = new TestModel();
                    collection.Add(randomModel);
                }

                var wrapper = new ChangeNotificationWrapper(collection);

                var collectionItemPropertyChanged = false;

                wrapper.CollectionItemPropertyChanged += (sender, e) => collectionItemPropertyChanged = true;

                var newModel = new TestModel();

                using (collection.SuspendChangeNotifications())
                {
                    collection.Clear();
                    collection.Add(newModel);
                }

                newModel.FirstName = "Geert";

                Assert.IsTrue(collectionItemPropertyChanged, "Collection item property should have changed");
            }
Пример #6
0
            public void HandlesCollectionResetsCorrectly()
            {
                var       collection = new ObservableCollection <TestModel>();
                TestModel model      = null;

                for (var i = 0; i < 10; i++)
                {
                    var randomModel = new TestModel();
                    collection.Add(randomModel);
                }

                model = collection[0];

                var wrapper = new ChangeNotificationWrapper(collection);

                var collectionItemPropertyChanged = false;

                wrapper.CollectionItemPropertyChanged += (sender, e) => collectionItemPropertyChanged = true;

                collection.Clear();

                model.FirstName = "Geert";

                Assert.IsFalse(collectionItemPropertyChanged);
            }
Пример #7
0
            public void HandlesCollectionChangesCorrectly()
            {
                var collection = new ObservableCollection <TestModel>();
                var wrapper    = new ChangeNotificationWrapper(collection);

                var itemsAdded   = false;
                var itemsRemoved = false;

                wrapper.CollectionChanged += (sender, e) =>
                {
                    if (e.OldItems != null)
                    {
                        itemsRemoved = true;
                    }

                    if (e.NewItems != null)
                    {
                        itemsAdded = true;
                    }
                };

                var model = new TestModel();

                collection.Add(model);
                Assert.IsTrue(itemsAdded, "Item should have been added");
                Assert.IsFalse(itemsRemoved, "Item should not (yet) have been removed");

                collection.Remove(model);
                Assert.IsTrue(itemsRemoved, "Item should have been removed");
            }
Пример #8
0
            public void ReturnsFalseForNonCollectionChangedItem()
            {
                var collection = new List <int>();
                var wrapper    = new ChangeNotificationWrapper(collection);

                Assert.IsFalse(wrapper.SupportsNotifyCollectionChanged);
            }
Пример #9
0
            public void DoesNotLeakForPropertyChanged()
            {
                var model   = new TestModel();
                var wrapper = new ChangeNotificationWrapper(model);

                Assert.IsTrue(wrapper.IsObjectAlive);

                model = null;
                GC.Collect();

                Assert.IsFalse(wrapper.IsObjectAlive);
            }
Пример #10
0
 private void OnSelectedThingsChanged()
 {
     if (!(wrapper is null))
     {
         wrapper.CollectionChanged -= Wrapper_CollectionChanged;
     }
     if (!(SelectedThings is null))
     {
         wrapper = new ChangeNotificationWrapper(SelectedThings);
         wrapper.CollectionChanged += Wrapper_CollectionChanged;
     }
 }
Пример #11
0
            public void HandlesPropertyChangesCorrectly()
            {
                var model   = new TestModel();
                var wrapper = new ChangeNotificationWrapper(model);

                bool propertyChanged = false;

                wrapper.PropertyChanged += (sender, e) => propertyChanged = true;

                model.FirstName = "Geert";

                Assert.IsTrue(propertyChanged);
            }
Пример #12
0
            public void DoesNotLeakForCollectionChanged()
            {
                var model           = new TestModel();
                var collectionModel = new ObservableCollection <TestModel>(new[] { model });
                var wrapper         = new ChangeNotificationWrapper(collectionModel);

                Assert.IsTrue(wrapper.IsObjectAlive);

                collectionModel = null;
                GC.Collect();

                Assert.IsFalse(wrapper.IsObjectAlive);
            }
Пример #13
0
            public void UnsubscribesFromCollectionChangedEvents()
            {
                var collection = new ObservableCollection <TestModel>();
                var wrapper    = new ChangeNotificationWrapper(collection);

                wrapper.UnsubscribeFromAllEvents();

                bool eventRaised = false;

                wrapper.CollectionChanged += (sender, e) => eventRaised = true;

                collection.Add(new TestModel());

                Assert.IsFalse(eventRaised);
            }
Пример #14
0
            public void UnsubscribesFromPropertyChangedEvents()
            {
                var testModel = new TestModel();

                var wrapper = new ChangeNotificationWrapper(testModel);

                wrapper.UnsubscribeFromAllEvents();

                bool eventRaised = false;

                wrapper.PropertyChanged += (sender, e) => eventRaised = true;

                testModel.FirstName = "Geert";

                Assert.IsFalse(eventRaised);
            }
        protected AbstractReportPluginsCommandContainer(string command, ICommandManager commandManager,
                                                        IServiceLocator serviceLocator)
            : base(command, commandManager, serviceLocator)
        {
            _licenseService       = serviceLocator.ResolveType <ILicenseService>();
            _applicationService   = serviceLocator.ResolveType <IApplicationService>();
            _dataPersisterService = serviceLocator.ResolveType <DataPersisterService>();
            GlobalService         = serviceLocator.ResolveType <GlobalService>();
            GlobalFrontendService = Catel.IoC.ServiceLocator.Default.ResolveType <GlobalFrontendService>();

            var wrapper = new ChangeNotificationWrapper(GlobalService.Plugins);

            wrapper.CollectionItemPropertyChanged += OnPluginItemPropertyChanged;
            wrapper.CollectionChanged             += OnPluginListChanged;

            ReportAll = false;
        }
Пример #16
0
            public void UnsubscribesFromCollectionItemPropertyChangedEvents()
            {
                var testModel  = new TestModel();
                var collection = new ObservableCollection <TestModel>(new[] { testModel });

                var wrapper = new ChangeNotificationWrapper(collection);

                wrapper.UnsubscribeFromAllEvents();

                bool eventRaised = false;

                wrapper.CollectionItemPropertyChanged += (sender, e) => eventRaised = true;

                testModel.FirstName = "Geert";

                Assert.IsFalse(eventRaised);
            }
Пример #17
0
            public void HandlesCollectionItemPropertyChangesCorrectly()
            {
                var collection = new ObservableCollection <TestModel>();
                var model      = new TestModel();

                collection.Add(model);

                var wrapper = new ChangeNotificationWrapper(collection);

                bool collectionItemPropertyChanged = false;

                wrapper.CollectionItemPropertyChanged += (sender, e) => collectionItemPropertyChanged = true;

                model.FirstName = "Geert";

                Assert.IsTrue(collectionItemPropertyChanged);
            }
Пример #18
0
 public void OnSelectedCProgramChanged()
 {
     if (SelectedCProgram != null)
     {
         _selectedCProgramWatcher = new ChangeNotificationWrapper(SelectedCProgram);
         _selectedCProgramWatcher.PropertyChanged += OnSelectedCProgramPropertyChanged;
         ListCollectionView list = (ListCollectionView)FreeThreads;
         list.Filter = new Predicate <object>(x => (!((int?)x).HasValue || ThreadCPrograms.FirstOrDefault(c => c.ThreadID == (int?)x) == null) && (int?)x != SelectedCProgram.ThreadID);
         list.Refresh();
         var ftb = new StringBuilder();
         foreach (int?ft in list)
         {
             ftb.Append(Convert.ToString(ft));
             ftb.Append(" ");
         }
         LogTo.Info("Editing C program: {0}, free threads: {1}", SelectedCProgram.FileName, ftb.ToString());
     }
 }
Пример #19
0
            public void HandlesCollectionChangesCorrectlyInSuspensionModeMixedConsolidate()
            {
                var collection = new FastObservableCollection <TestModel>
                {
                    AutomaticallyDispatchChangeNotifications = false
                };

                var wrapper = new ChangeNotificationWrapper(collection);

                var itemsReset   = false;
                var itemsAdded   = false;
                var itemsRemoved = false;

                var model = new TestModel();

                collection.Add(model);

                wrapper.CollectionChanged += (sender, e) =>
                {
                    if (e.OldItems != null)
                    {
                        itemsRemoved = true;
                    }

                    if (e.Action == NotifyCollectionChangedAction.Reset)
                    {
                        itemsReset = true;
                    }

                    if (e.NewItems != null)
                    {
                        itemsAdded = true;
                    }
                };

                using (collection.SuspendChangeNotifications(SuspensionMode.MixedConsolidate))
                {
                    collection.ReplaceRange(new [] { new TestModel() });
                }

                Assert.IsTrue(itemsAdded, "Items should be added");
                Assert.IsTrue(itemsRemoved, "Items should be removed");
                Assert.IsFalse(itemsReset, "Items should not be reset");
            }
Пример #20
0
        /// <summary>
        /// Releases unmanaged and - optionally - managed resources.
        /// </summary>
        /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (_changeNotificationWrapper != null)
                {
                    _changeNotificationWrapper.PropertyChanged -= OnInstancePropertyChanged;
                    _changeNotificationWrapper.UnsubscribeFromAllEvents();
                    _changeNotificationWrapper = null;
                }

                foreach (var weakEventListener in _weakEventListeners)
                {
                    weakEventListener.Detach();
                }

                _weakEventListeners.Clear();
            }
        }
Пример #21
0
        /// <summary>
        /// Initializes a new instance of the <see cref="BindingParty" /> class.
        /// </summary>
        /// <param name="instance">The instance.</param>
        /// <param name="propertyName">Name of the property.</param>
        public BindingParty(object instance, string propertyName)
        {
            Argument.IsNotNull("instance", instance);

            _instance     = new WeakReference(instance);
            _propertyName = propertyName;

            var instanceType = instance.GetType();

            _toStringValue = string.Format("{0}.{1}", instanceType.Name, _propertyName);
            _propertyInfo  = instanceType.GetPropertyEx(_propertyName);
            if (_propertyInfo == null)
            {
                Log.ErrorAndThrowException <InvalidOperationException>("Property '{0}' not found, cannot create binding", _toStringValue);
            }

            _changeNotificationWrapper = new ChangeNotificationWrapper(instance);
            _changeNotificationWrapper.PropertyChanged += OnInstancePropertyChanged;
        }
Пример #22
0
        private void OnItemsSourceChanged(IEnumerable <IColorProvider> oldValue, IEnumerable <IColorProvider> newValue)
        {
            if (_changeNotificationWrapper != null)
            {
                _changeNotificationWrapper.CollectionItemPropertyChanged -= OnColorProviderPropertyChanged;
                _changeNotificationWrapper.UnsubscribeFromAllEvents();
                _changeNotificationWrapper = null;
            }

            FilteredItemsSource = GetFilteredItems();
            FilteredItemsIds    = FilteredItemsSource == null ? null : FilteredItemsSource.Select(cp => cp.Id);

            if (newValue != null)
            {
                _changeNotificationWrapper = new ChangeNotificationWrapper(newValue);
                _changeNotificationWrapper.CollectionItemPropertyChanged += OnColorProviderPropertyChanged;
            }

            UpdateIsAllVisible();
        }
Пример #23
0
        private void OnItemsSourceChanged(IEnumerable <IColorLegendItem> oldValue, IEnumerable <IColorLegendItem> newValue)
        {
            if (_changeNotificationWrapper != null)
            {
                _changeNotificationWrapper.CollectionItemPropertyChanged -= OnColorProviderPropertyChanged;
                _changeNotificationWrapper.UnsubscribeFromAllEvents();
                _changeNotificationWrapper = null;
            }

            SetCurrentValue(FilteredItemsSourceProperty, GetFilteredItems());
            SetCurrentValue(FilteredItemsIdsProperty, FilteredItemsSource?.Select(cp => cp.Id));

            if (newValue != null)
            {
                _changeNotificationWrapper = new ChangeNotificationWrapper(newValue);
                _changeNotificationWrapper.CollectionItemPropertyChanged += OnColorProviderPropertyChanged;
            }

            UpdateIsAllVisible();
        }
            public void HandlesCollectionChangesByResetCorrectly()
            {
                var collection = new FastObservableCollection <TestModel>();
                var wrapper    = new ChangeNotificationWrapper(collection);

                var itemsReset   = false;
                var itemsAdded   = false;
                var itemsRemoved = false;

                var model = new TestModel();

                collection.Add(model);

                wrapper.CollectionChanged += (sender, e) =>
                {
                    if (e.OldItems != null)
                    {
                        itemsRemoved = true;
                    }

                    if (e.Action == NotifyCollectionChangedAction.Reset)
                    {
                        itemsReset = true;
                    }

                    if (e.NewItems != null)
                    {
                        itemsAdded = true;
                    }
                };

                using (collection.SuspendChangeNotifications())
                {
                    collection.ReplaceRange(new [] { new TestModel() });
                }

                Assert.IsFalse(itemsAdded);
                Assert.IsFalse(itemsRemoved);
                Assert.IsTrue(itemsReset);
            }
Пример #25
0
 public void ReturnsFalseForObjectNotImplementingINotifyPropertyChanged()
 {
     Assert.IsFalse(ChangeNotificationWrapper.IsUsefulForObject(15));
 }
Пример #26
0
 public void ReturnsFalseForNullObject()
 {
     Assert.IsFalse(ChangeNotificationWrapper.IsUsefulForObject(null));
 }
Пример #27
0
 public void ReturnsTrueForObjectImplementingINotifyPropertyChanged()
 {
     Assert.IsTrue(ChangeNotificationWrapper.IsUsefulForObject(new TestModel()));
 }