Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Framework / MS / Internal / Annotations / ObservableDictionary.cs / 1 / ObservableDictionary.cs
//------------------------------------------------------------------------------
//
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//
// Description:
// ContentLocatorPart represents a set of name/value pairs that identify a
// piece of data within a certain context. The names and values are
// strings.
//
// Spec: [....]/sites/ag/Specifications/Simplifying%20Store%20Cache%20Model.doc
//
// History:
// 05/06/2004: [....]: Created
// 06/30/2004: [....]: Added change notifications to parent, clean-up
//-----------------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Xml;
namespace MS.Internal.Annotations
{
///
/// ContentLocatorPart represents a set of name/value pairs that identify a
/// piece of data within a certain context. The names and values are
/// all strings.
///
internal class ObservableDictionary : IDictionary, INotifyPropertyChanged
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
///
/// Creates a ContentLocatorPart with the specified type name and namespace.
///
public ObservableDictionary()
{
_nameValues = new Dictionary();
}
#endregion Constructors
//------------------------------------------------------
//
// Public Methods
//
//-----------------------------------------------------
#region Public Methods
///
/// Adds a key/value pair to the ContentLocatorPart. If a value for the key already
/// exists, the old value is overwritten by the new value.
///
/// key
/// value
/// key or val is null
/// a value for key is already present in the locator part
public void Add(string key, string val)
{
if (key == null || val == null)
{
throw new ArgumentNullException(key == null ? "key" : "val");
}
_nameValues.Add(key, val);
FireDictionaryChanged();
}
///
/// Removes all name/value pairs from the ContentLocatorPart.
///
public void Clear()
{
int count = _nameValues.Count;
if (count > 0)
{
_nameValues.Clear();
// Only fire changed event if the dictionary actually changed
FireDictionaryChanged();
}
}
///
/// Returns whether or not a value of the key exists in this ContentLocatorPart.
///
/// the key to check for
/// true - yes, false - no
public bool ContainsKey(string key)
{
return _nameValues.ContainsKey(key);
}
///
/// Removes the key and its value from the ContentLocatorPart.
///
/// key to be removed
/// true - the key was found in the ContentLocatorPart, false o- it wasn't
public bool Remove(string key)
{
bool exists = _nameValues.Remove(key);
// Only fire changed event if the key was actually removed
if (exists)
{
FireDictionaryChanged();
}
return exists;
}
///
/// Returns an enumerator for the key/value pairs in this ContentLocatorPart.
///
/// an enumerator for the key/value pairs; never returns null
IEnumerator IEnumerable.GetEnumerator()
{
return _nameValues.GetEnumerator();
}
///
/// Returns an enumerator forthe key/value pairs in this ContentLocatorPart.
///
/// an enumerator for the key/value pairs; never returns null
public IEnumerator> GetEnumerator()
{
return ((IEnumerable>)_nameValues).GetEnumerator();
}
///
///
///
///
///
///
/// key is null
public bool TryGetValue(string key, out string value)
{
if (key == null)
throw new ArgumentNullException("key");
return _nameValues.TryGetValue(key, out value);
}
///
///
///
///
/// pair is null
void ICollection>.Add(KeyValuePair pair)
{
((ICollection>)_nameValues).Add(pair);
}
///
///
///
///
///
/// pair is null
bool ICollection>.Contains(KeyValuePair pair)
{
return ((ICollection>)_nameValues).Contains(pair);
}
///
///
///
///
///
/// pair is null
bool ICollection>.Remove(KeyValuePair pair)
{
return ((ICollection>)_nameValues).Remove(pair);
}
///
///
///
///
///
/// target is null
/// startIndex is less than zero or greater than the lenght of target
void ICollection>.CopyTo(KeyValuePair[] target, int startIndex)
{
if (target == null)
throw new ArgumentNullException("target");
if (startIndex < 0 || startIndex > target.Length)
throw new ArgumentOutOfRangeException("startIndex");
((ICollection>)_nameValues).CopyTo(target, startIndex);
}
#endregion Public Methods
//------------------------------------------------------
//
// Public Operators
//
//------------------------------------------------------
//-----------------------------------------------------
//
// Public Events
//
//------------------------------------------------------
//-----------------------------------------------------
//
// Public Properties
//
//-----------------------------------------------------
#region Public Properties
///
/// The number of name/value pairs in this ContentLocatorPart.
///
/// count of name/value pairs
public int Count
{
get
{
return _nameValues.Count;
}
}
///
/// Indexer provides lookup of values by key. Gets or sets the value
/// in the ContentLocatorPart for the specified key. If the key does not exist
/// in the ContentLocatorPart,
///
/// key
/// the value stored in this locator part for key
public string this[string key]
{
get
{
if (key == null)
{
throw new ArgumentNullException("key");
}
string value = null;
_nameValues.TryGetValue(key, out value);
return value;
}
set
{
if (key == null)
{
throw new ArgumentNullException("key");
}
if (value == null)
{
throw new ArgumentNullException("value");
}
string oldValue = null;
_nameValues.TryGetValue(key, out oldValue);
// If the new value is actually different, then we add it and fire
// a change notification
if ((oldValue == null) || (oldValue != value))
{
_nameValues[key] = value;
FireDictionaryChanged();
}
}
}
///
///
///
public bool IsReadOnly
{
get
{
return false;
}
}
///
/// Returns a collection of all the keys in this ContentLocatorPart.
///
/// keys
public ICollection Keys
{
get
{
return _nameValues.Keys;
}
}
///
/// Returns a collection of all the values in this ContentLocatorPart.
///
/// values
public ICollection Values
{
get
{
return _nameValues.Values;
}
}
#endregion Public Properties
//-----------------------------------------------------
//
// Public Events
//
//------------------------------------------------------
//-----------------------------------------------------
//
// Internal Methods
//
//------------------------------------------------------
//------------------------------------------------------
//
// Internal Operators
//
//-----------------------------------------------------
//------------------------------------------------------
//
// Internal Events
//
//-----------------------------------------------------
#region Public Events
///
///
///
public event PropertyChangedEventHandler PropertyChanged;
#endregion Public Events
//-----------------------------------------------------
//
// Internal Properties
//
//-----------------------------------------------------
//------------------------------------------------------
//
// Private Methods
//
//-----------------------------------------------------
#region Private Methods
///
/// Notify the owner this ContentLocatorPart has changed.
///
private void FireDictionaryChanged()
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(null));
}
}
#endregion Private Methods
//------------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
#region Private Fields
///
/// The internal data structure.
///
private Dictionary _nameValues;
#endregion Private Fields
}
}
// 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
- AutomationElementCollection.cs
- RelationshipSet.cs
- COM2ExtendedTypeConverter.cs
- OpenTypeCommon.cs
- SqlError.cs
- DataPagerCommandEventArgs.cs
- InputReportEventArgs.cs
- XmlSchemaSequence.cs
- GeometryGroup.cs
- ExceptionUtil.cs
- UInt16Storage.cs
- ObjectStateFormatter.cs
- ArrangedElementCollection.cs
- HostDesigntimeLicenseContext.cs
- OdbcFactory.cs
- DynamicValidatorEventArgs.cs
- AssignDesigner.xaml.cs
- StrokeFIndices.cs
- DataSourceCache.cs
- PerspectiveCamera.cs
- PersistenceTask.cs
- COAUTHIDENTITY.cs
- ADMembershipProvider.cs
- GridView.cs
- Byte.cs
- RuntimeHandles.cs
- _Connection.cs
- CacheEntry.cs
- TextServicesCompartment.cs
- DoubleLink.cs
- SqlEnums.cs
- FullTextState.cs
- _HeaderInfoTable.cs
- smtpconnection.cs
- DBCommand.cs
- XmlDataSourceView.cs
- MasterPageParser.cs
- EntitySetBaseCollection.cs
- CompilerCollection.cs
- SiblingIterators.cs
- BindStream.cs
- HtmlInputText.cs
- EditorPartCollection.cs
- Color.cs
- Literal.cs
- SafeRightsManagementHandle.cs
- formatter.cs
- RemotingHelper.cs
- Pair.cs
- RequestStatusBarUpdateEventArgs.cs
- FreezableCollection.cs
- HttpModuleAction.cs
- PackageRelationshipCollection.cs
- DotExpr.cs
- ZipIOModeEnforcingStream.cs
- NotifyCollectionChangedEventArgs.cs
- ThemeConfigurationDialog.cs
- RowParagraph.cs
- MemoryMappedViewAccessor.cs
- RawStylusSystemGestureInputReport.cs
- ClientSettingsStore.cs
- TreeNode.cs
- ProxyManager.cs
- XmlSerializationGeneratedCode.cs
- Matrix3DConverter.cs
- BinaryObjectInfo.cs
- DataGrid.cs
- SQLByte.cs
- SiteMapSection.cs
- InvalidWMPVersionException.cs
- PersonalizationState.cs
- PeerEndPoint.cs
- ClassGenerator.cs
- Style.cs
- TransactionScope.cs
- ConditionalWeakTable.cs
- IPipelineRuntime.cs
- WebControlsSection.cs
- DBConcurrencyException.cs
- XmlObjectSerializerReadContext.cs
- AssociationProvider.cs
- ErrorCodes.cs
- DataGridRow.cs
- DrawingCollection.cs
- Debug.cs
- ExtentKey.cs
- UnsupportedPolicyOptionsException.cs
- DataBoundControlHelper.cs
- ComponentCollection.cs
- CssClassPropertyAttribute.cs
- DataQuery.cs
- SetStoryboardSpeedRatio.cs
- ReliableOutputSessionChannel.cs
- CustomAttributeFormatException.cs
- FormParameter.cs
- Suspend.cs
- ResourcePermissionBaseEntry.cs
- ArrayWithOffset.cs
- SQLResource.cs
- AutomationPropertyChangedEventArgs.cs