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
- Invariant.cs
- EditorZoneBase.cs
- HuffmanTree.cs
- SvcMapFile.cs
- LinkedDataMemberFieldEditor.cs
- AssemblyAttributesGoHere.cs
- HtmlShimManager.cs
- NameTable.cs
- DefaultCommandConverter.cs
- HebrewNumber.cs
- FrameworkElement.cs
- InternalDuplexChannelFactory.cs
- PackWebRequest.cs
- OrthographicCamera.cs
- HeaderElement.cs
- LeafCellTreeNode.cs
- DataGridItemCollection.cs
- DSASignatureFormatter.cs
- EUCJPEncoding.cs
- XLinq.cs
- ImageSource.cs
- ColumnCollection.cs
- PrivilegedConfigurationManager.cs
- PageTheme.cs
- QualificationDataAttribute.cs
- WorkItem.cs
- ManagementOperationWatcher.cs
- HttpCapabilitiesSectionHandler.cs
- ToolZoneDesigner.cs
- HostExecutionContextManager.cs
- ToolStripScrollButton.cs
- GlyphShapingProperties.cs
- QueryAccessibilityHelpEvent.cs
- JpegBitmapDecoder.cs
- TextFragmentEngine.cs
- FileSecurity.cs
- SolidColorBrush.cs
- UTF32Encoding.cs
- AtomContentProperty.cs
- Int64Storage.cs
- SamlDelegatingWriter.cs
- TakeOrSkipWhileQueryOperator.cs
- ComponentCache.cs
- CodeConditionStatement.cs
- ViewCellSlot.cs
- DefaultValueTypeConverter.cs
- Int64Storage.cs
- ControlParameter.cs
- SignatureConfirmationElement.cs
- TextSelection.cs
- DllHostedComPlusServiceHost.cs
- DeclarativeConditionsCollection.cs
- DataGridRow.cs
- DataFormat.cs
- LayoutTableCell.cs
- IgnoreSection.cs
- MultipartContentParser.cs
- ToolStripSystemRenderer.cs
- DefaultBindingPropertyAttribute.cs
- AnalyzedTree.cs
- GrammarBuilderRuleRef.cs
- ResXBuildProvider.cs
- IdnMapping.cs
- GenericParameterDataContract.cs
- CodeChecksumPragma.cs
- PeerTransportSecuritySettings.cs
- ConfigurationConverterBase.cs
- DecimalAnimationUsingKeyFrames.cs
- ObjectDataSourceChooseMethodsPanel.cs
- CacheRequest.cs
- MethodCallTranslator.cs
- BasicBrowserDialog.cs
- SqlDuplicator.cs
- EmissiveMaterial.cs
- RegexCharClass.cs
- TraceUtils.cs
- CompletionCallbackWrapper.cs
- HttpResponseInternalWrapper.cs
- OpenTypeCommon.cs
- LineMetrics.cs
- Rect.cs
- QilSortKey.cs
- DbConnectionPoolCounters.cs
- PageAdapter.cs
- StateMachineSubscription.cs
- DateTimeFormat.cs
- InputScope.cs
- PathSegmentCollection.cs
- WebPartActionVerb.cs
- BlurEffect.cs
- WSFederationHttpBindingCollectionElement.cs
- CookielessHelper.cs
- ObjectSecurity.cs
- PrincipalPermissionMode.cs
- Scheduling.cs
- Stack.cs
- Crypto.cs
- ColorConvertedBitmapExtension.cs
- TagNameToTypeMapper.cs
- AddInAdapter.cs