Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Base / System / Collections / Specialized / CollectionChangedEventManager.cs / 1305600 / CollectionChangedEventManager.cs
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
// Description: Manager for the CollectionChanged event in the "weak event listener"
// pattern. See WeakEventTable.cs for an overview.
//
//---------------------------------------------------------------------------
using System;
using System.Windows; // WeakEventManager
namespace System.Collections.Specialized
{
///
/// Manager for the INotifyCollectionChanged.CollectionChanged event.
///
public class CollectionChangedEventManager : WeakEventManager
{
#region Constructors
//
// Constructors
//
private CollectionChangedEventManager()
{
}
#endregion Constructors
#region Public Methods
//
// Public Methods
//
///
/// Add a listener to the given source's event.
///
public static void AddListener(INotifyCollectionChanged source, IWeakEventListener listener)
{
if (source == null)
throw new ArgumentNullException("source");
if (listener == null)
throw new ArgumentNullException("listener");
CurrentManager.ProtectedAddListener(source, listener);
}
///
/// Remove a listener to the given source's event.
///
public static void RemoveListener(INotifyCollectionChanged source, IWeakEventListener listener)
{
/* for app-compat, allow RemoveListener(null, x) - it's a no-op (see Dev10 796788)
if (source == null)
throw new ArgumentNullException("source");
*/
if (listener == null)
throw new ArgumentNullException("listener");
CurrentManager.ProtectedRemoveListener(source, listener);
}
#endregion Public Methods
#region Protected Methods
//
// Protected Methods
//
///
/// Listen to the given source for the event.
///
protected override void StartListening(object source)
{
INotifyCollectionChanged typedSource = (INotifyCollectionChanged)source;
typedSource.CollectionChanged += new NotifyCollectionChangedEventHandler(OnCollectionChanged);
}
///
/// Stop listening to the given source for the event.
///
protected override void StopListening(object source)
{
INotifyCollectionChanged typedSource = (INotifyCollectionChanged)source;
typedSource.CollectionChanged -= new NotifyCollectionChangedEventHandler(OnCollectionChanged);
}
#endregion Protected Methods
#region Private Properties
//
// Private Properties
//
// get the event manager for the current thread
private static CollectionChangedEventManager CurrentManager
{
get
{
Type managerType = typeof(CollectionChangedEventManager);
CollectionChangedEventManager manager = (CollectionChangedEventManager)GetCurrentManager(managerType);
// at first use, create and register a new manager
if (manager == null)
{
manager = new CollectionChangedEventManager();
SetCurrentManager(managerType, manager);
}
return manager;
}
}
#endregion Private Properties
#region Private Methods
//
// Private Methods
//
// event handler for CollectionChanged event
private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs args)
{
DeliverEvent(sender, args);
}
#endregion Private Methods
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
// Description: Manager for the CollectionChanged event in the "weak event listener"
// pattern. See WeakEventTable.cs for an overview.
//
//---------------------------------------------------------------------------
using System;
using System.Windows; // WeakEventManager
namespace System.Collections.Specialized
{
///
/// Manager for the INotifyCollectionChanged.CollectionChanged event.
///
public class CollectionChangedEventManager : WeakEventManager
{
#region Constructors
//
// Constructors
//
private CollectionChangedEventManager()
{
}
#endregion Constructors
#region Public Methods
//
// Public Methods
//
///
/// Add a listener to the given source's event.
///
public static void AddListener(INotifyCollectionChanged source, IWeakEventListener listener)
{
if (source == null)
throw new ArgumentNullException("source");
if (listener == null)
throw new ArgumentNullException("listener");
CurrentManager.ProtectedAddListener(source, listener);
}
///
/// Remove a listener to the given source's event.
///
public static void RemoveListener(INotifyCollectionChanged source, IWeakEventListener listener)
{
/* for app-compat, allow RemoveListener(null, x) - it's a no-op (see Dev10 796788)
if (source == null)
throw new ArgumentNullException("source");
*/
if (listener == null)
throw new ArgumentNullException("listener");
CurrentManager.ProtectedRemoveListener(source, listener);
}
#endregion Public Methods
#region Protected Methods
//
// Protected Methods
//
///
/// Listen to the given source for the event.
///
protected override void StartListening(object source)
{
INotifyCollectionChanged typedSource = (INotifyCollectionChanged)source;
typedSource.CollectionChanged += new NotifyCollectionChangedEventHandler(OnCollectionChanged);
}
///
/// Stop listening to the given source for the event.
///
protected override void StopListening(object source)
{
INotifyCollectionChanged typedSource = (INotifyCollectionChanged)source;
typedSource.CollectionChanged -= new NotifyCollectionChangedEventHandler(OnCollectionChanged);
}
#endregion Protected Methods
#region Private Properties
//
// Private Properties
//
// get the event manager for the current thread
private static CollectionChangedEventManager CurrentManager
{
get
{
Type managerType = typeof(CollectionChangedEventManager);
CollectionChangedEventManager manager = (CollectionChangedEventManager)GetCurrentManager(managerType);
// at first use, create and register a new manager
if (manager == null)
{
manager = new CollectionChangedEventManager();
SetCurrentManager(managerType, manager);
}
return manager;
}
}
#endregion Private Properties
#region Private Methods
//
// Private Methods
//
// event handler for CollectionChanged event
private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs args)
{
DeliverEvent(sender, args);
}
#endregion Private Methods
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SizeChangedEventArgs.cs
- DispatchOperationRuntime.cs
- SQLDoubleStorage.cs
- documentsequencetextpointer.cs
- ThicknessKeyFrameCollection.cs
- DataRelationCollection.cs
- ClipboardProcessor.cs
- DataRowCollection.cs
- _IPv4Address.cs
- MultipleViewPattern.cs
- ConnectionPoint.cs
- DataServiceRequestArgs.cs
- XamlStackWriter.cs
- BinarySerializer.cs
- GraphicsState.cs
- XamlSerializer.cs
- DefaultProxySection.cs
- ProviderCommandInfoUtils.cs
- SevenBitStream.cs
- KeyInstance.cs
- RowCache.cs
- MetafileHeaderEmf.cs
- TextCharacters.cs
- FlowPanelDesigner.cs
- ContractMethodParameterInfo.cs
- ArrayConverter.cs
- ActiveXContainer.cs
- ProvidersHelper.cs
- AtomicFile.cs
- ArgIterator.cs
- EdmTypeAttribute.cs
- Literal.cs
- ReachDocumentPageSerializer.cs
- Int32CAMarshaler.cs
- ExtendedPropertyDescriptor.cs
- jithelpers.cs
- SR.cs
- ConversionContext.cs
- PageThemeBuildProvider.cs
- RuntimeConfigLKG.cs
- ContainerParaClient.cs
- QilParameter.cs
- FixedSOMFixedBlock.cs
- IgnorePropertiesAttribute.cs
- Serializer.cs
- embossbitmapeffect.cs
- Encoder.cs
- Maps.cs
- PrtTicket_Public.cs
- SerializationInfoEnumerator.cs
- SessionEndingEventArgs.cs
- __TransparentProxy.cs
- EntityDataSourceSelectedEventArgs.cs
- ClockGroup.cs
- OdbcReferenceCollection.cs
- ToolStripStatusLabel.cs
- ContentTextAutomationPeer.cs
- UriScheme.cs
- _ShellExpression.cs
- MultiTouchSystemGestureLogic.cs
- ClockGroup.cs
- SearchForVirtualItemEventArgs.cs
- Point4D.cs
- AttachedAnnotationChangedEventArgs.cs
- SqlGatherConsumedAliases.cs
- XmlUtil.cs
- XmlDomTextWriter.cs
- BuildProvider.cs
- DataColumnMappingCollection.cs
- WrapPanel.cs
- StretchValidation.cs
- SystemTcpConnection.cs
- ListParagraph.cs
- XmlAtomErrorReader.cs
- CrossSiteScriptingValidation.cs
- ExpressionBinding.cs
- CodeRegionDirective.cs
- FrameworkContentElement.cs
- HtmlWindow.cs
- ValueTypeFixupInfo.cs
- VisualCollection.cs
- StructuredCompositeActivityDesigner.cs
- ObjectSecurity.cs
- AspNetSynchronizationContext.cs
- DefaultWorkflowTransactionService.cs
- ModelItemExtensions.cs
- BitmapEffect.cs
- AsymmetricSecurityProtocolFactory.cs
- DataRecordObjectView.cs
- MembershipValidatePasswordEventArgs.cs
- BinarySerializer.cs
- EventLogHandle.cs
- Transform3DGroup.cs
- ToolStripPanelCell.cs
- TypeDependencyAttribute.cs
- NotImplementedException.cs
- MultiTrigger.cs
- TemplateBamlRecordReader.cs
- XmlHierarchyData.cs
- EventManager.cs