public void ReturnsFalseForNonPropertyChangedItem() { var model = new object(); var wrapper = new ChangeNotificationWrapper(model); Assert.IsFalse(wrapper.SupportsNotifyPropertyChanged); }
public void ReturnsTrueForCollectionChangedItem() { var collection = new ObservableCollection <int>(); var wrapper = new ChangeNotificationWrapper(collection); Assert.IsTrue(wrapper.SupportsNotifyCollectionChanged); }
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); }
public void ReturnsTrueForPropertyChangedItem() { var model = new TestModel(); var wrapper = new ChangeNotificationWrapper(model); Assert.IsTrue(wrapper.SupportsNotifyPropertyChanged); }
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"); }
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); }
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"); }
public void ReturnsFalseForNonCollectionChangedItem() { var collection = new List <int>(); var wrapper = new ChangeNotificationWrapper(collection); Assert.IsFalse(wrapper.SupportsNotifyCollectionChanged); }
public void DoesNotLeakForPropertyChanged() { var model = new TestModel(); var wrapper = new ChangeNotificationWrapper(model); Assert.IsTrue(wrapper.IsObjectAlive); model = null; GC.Collect(); Assert.IsFalse(wrapper.IsObjectAlive); }
private void OnSelectedThingsChanged() { if (!(wrapper is null)) { wrapper.CollectionChanged -= Wrapper_CollectionChanged; } if (!(SelectedThings is null)) { wrapper = new ChangeNotificationWrapper(SelectedThings); wrapper.CollectionChanged += Wrapper_CollectionChanged; } }
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); }
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); }
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); }
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; }
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); }
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); }
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()); } }
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"); }
/// <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(); } }
/// <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; }
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(); }
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); }
public void ReturnsFalseForObjectNotImplementingINotifyPropertyChanged() { Assert.IsFalse(ChangeNotificationWrapper.IsUsefulForObject(15)); }
public void ReturnsFalseForNullObject() { Assert.IsFalse(ChangeNotificationWrapper.IsUsefulForObject(null)); }
public void ReturnsTrueForObjectImplementingINotifyPropertyChanged() { Assert.IsTrue(ChangeNotificationWrapper.IsUsefulForObject(new TestModel())); }