Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Framework / MS / Internal / Data / XmlDataCollection.cs / 1 / XmlDataCollection.cs
//---------------------------------------------------------------------------- // //// Copyright (C) 2003 by Microsoft Corporation. All rights reserved. // // // // Description: Data collection produced by an XmlDataProvider // // Specs: http://avalon/connecteddata/M5%20Specs/IDataCollection.mht // //--------------------------------------------------------------------------- using System.Xml; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.Windows.Data; using System.Windows.Markup; namespace MS.Internal.Data { ////// Implementation of a data collection based on ArrayList, /// implementing INotifyCollectionChanged to notify listeners /// when items get added, removed or the whole list is refreshed. /// internal class XmlDataCollection : ReadOnlyObservableCollection{ //----------------------------------------------------- // // Constructors // //----------------------------------------------------- /// /// Initializes a new instance of XmlDataCollection that is empty and has the specified initial capacity. /// /// Parent Xml Data Source internal XmlDataCollection(XmlDataProvider xmlDataProvider) : base(new ObservableCollection()) { _xds = xmlDataProvider; } //------------------------------------------------------ // // Internal Properties // //----------------------------------------------------- /// /// XmlNamespaceManager property, XmlNamespaceManager used for executing XPath queries. /// internal XmlNamespaceManager XmlNamespaceManager { get { if (_nsMgr == null && _xds != null) _nsMgr = _xds.XmlNamespaceManager; return _nsMgr; } set { _nsMgr = value; } } internal XmlDataProvider ParentXmlDataProvider { get { return _xds; } } //------------------------------------------------------ // // Internal Methods // //------------------------------------------------------ // return true if the counts are different or the identity of the nodes have changed internal bool CollectionHasChanged(XmlNodeList nodes) { int count = this.Count; if (count != nodes.Count) return true; for (int i = 0; i < count; ++i) { if (this[i] != nodes[i]) return true; } return false; } // Update the collection using new query results internal void SynchronizeCollection(XmlNodeList nodes) { if (nodes == null) { Items.Clear(); return; } int i = 0, j; while (i < this.Count && i < nodes.Count) { if (this[i] != nodes[i]) { // starting after current node, see if the old node is still in the new list. for (j = i + 1; j < nodes.Count; ++j) { if (this[i] == nodes[j]) { break; } } if (j < nodes.Count) { // the node from existing collection is found at [j] in the new collection; // this means the node(s) [i ~ j-1] in new collection should be inserted. while (i < j) { Items.Insert(i, nodes[i]); ++i; } ++i; // advance to next node } else { // the node from existing collection is no longer in // the new collection, delete it. Items.RemoveAt(i); // do not advance to the next node } } else { // nodes are the same; advance to the next node. ++i; } } // Remove any extra nodes left over in the old collection while (i < this.Count) { Items.RemoveAt(i); } // Add any extra new nodes from the new collection while (i < nodes.Count) { Items.Insert(i, nodes[i]); ++i; } } private XmlDataProvider _xds; private XmlNamespaceManager _nsMgr; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // //// Copyright (C) 2003 by Microsoft Corporation. All rights reserved. // // // // Description: Data collection produced by an XmlDataProvider // // Specs: http://avalon/connecteddata/M5%20Specs/IDataCollection.mht // //--------------------------------------------------------------------------- using System.Xml; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.Windows.Data; using System.Windows.Markup; namespace MS.Internal.Data { ////// Implementation of a data collection based on ArrayList, /// implementing INotifyCollectionChanged to notify listeners /// when items get added, removed or the whole list is refreshed. /// internal class XmlDataCollection : ReadOnlyObservableCollection{ //----------------------------------------------------- // // Constructors // //----------------------------------------------------- /// /// Initializes a new instance of XmlDataCollection that is empty and has the specified initial capacity. /// /// Parent Xml Data Source internal XmlDataCollection(XmlDataProvider xmlDataProvider) : base(new ObservableCollection()) { _xds = xmlDataProvider; } //------------------------------------------------------ // // Internal Properties // //----------------------------------------------------- /// /// XmlNamespaceManager property, XmlNamespaceManager used for executing XPath queries. /// internal XmlNamespaceManager XmlNamespaceManager { get { if (_nsMgr == null && _xds != null) _nsMgr = _xds.XmlNamespaceManager; return _nsMgr; } set { _nsMgr = value; } } internal XmlDataProvider ParentXmlDataProvider { get { return _xds; } } //------------------------------------------------------ // // Internal Methods // //------------------------------------------------------ // return true if the counts are different or the identity of the nodes have changed internal bool CollectionHasChanged(XmlNodeList nodes) { int count = this.Count; if (count != nodes.Count) return true; for (int i = 0; i < count; ++i) { if (this[i] != nodes[i]) return true; } return false; } // Update the collection using new query results internal void SynchronizeCollection(XmlNodeList nodes) { if (nodes == null) { Items.Clear(); return; } int i = 0, j; while (i < this.Count && i < nodes.Count) { if (this[i] != nodes[i]) { // starting after current node, see if the old node is still in the new list. for (j = i + 1; j < nodes.Count; ++j) { if (this[i] == nodes[j]) { break; } } if (j < nodes.Count) { // the node from existing collection is found at [j] in the new collection; // this means the node(s) [i ~ j-1] in new collection should be inserted. while (i < j) { Items.Insert(i, nodes[i]); ++i; } ++i; // advance to next node } else { // the node from existing collection is no longer in // the new collection, delete it. Items.RemoveAt(i); // do not advance to the next node } } else { // nodes are the same; advance to the next node. ++i; } } // Remove any extra nodes left over in the old collection while (i < this.Count) { Items.RemoveAt(i); } // Add any extra new nodes from the new collection while (i < nodes.Count) { Items.Insert(i, nodes[i]); ++i; } } private XmlDataProvider _xds; private XmlNamespaceManager _nsMgr; } } // 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
- ErrorRuntimeConfig.cs
- IpcClientManager.cs
- ControlBindingsConverter.cs
- BookmarkNameHelper.cs
- DbProviderConfigurationHandler.cs
- BookmarkEventArgs.cs
- FormViewDeleteEventArgs.cs
- StringPropertyBuilder.cs
- WindowInteractionStateTracker.cs
- TaiwanCalendar.cs
- SubstitutionList.cs
- NativeBuffer.cs
- CodeIdentifier.cs
- WindowsFont.cs
- UserMapPath.cs
- TypeInfo.cs
- NumberSubstitution.cs
- ResourceProperty.cs
- XPathAncestorIterator.cs
- FixedElement.cs
- BasicViewGenerator.cs
- InplaceBitmapMetadataWriter.cs
- StrongNamePublicKeyBlob.cs
- DesignerContextDescriptor.cs
- MediaEntryAttribute.cs
- ObjectStorage.cs
- NavigationHelper.cs
- AggregateNode.cs
- Expander.cs
- FixUp.cs
- CommandConverter.cs
- MouseGestureValueSerializer.cs
- DomainConstraint.cs
- CachedFontFamily.cs
- RemoveStoryboard.cs
- IgnoreDataMemberAttribute.cs
- ObjectDataSourceDisposingEventArgs.cs
- DocumentXPathNavigator.cs
- XmlCharCheckingWriter.cs
- TransactionOptions.cs
- ActiveDocumentEvent.cs
- Tuple.cs
- activationcontext.cs
- MessageHeaderException.cs
- CompressionTransform.cs
- SafeCoTaskMem.cs
- SimpleWebHandlerParser.cs
- KeyValueConfigurationCollection.cs
- ThreadStateException.cs
- StartFileNameEditor.cs
- GridItemCollection.cs
- BindingValueChangedEventArgs.cs
- CreateUserWizard.cs
- PageContentAsyncResult.cs
- DispatcherOperation.cs
- CurrencyManager.cs
- XpsSerializationManagerAsync.cs
- GridSplitterAutomationPeer.cs
- FtpCachePolicyElement.cs
- Metafile.cs
- PrefixQName.cs
- HiddenFieldPageStatePersister.cs
- DesignerExtenders.cs
- OrderedDictionaryStateHelper.cs
- XPathMultyIterator.cs
- InternalControlCollection.cs
- SoapCodeExporter.cs
- DBAsyncResult.cs
- StrongNameMembershipCondition.cs
- XmlSchemaSimpleContentExtension.cs
- SpeechDetectedEventArgs.cs
- XmlEntityReference.cs
- TileModeValidation.cs
- ElementMarkupObject.cs
- ConfigurationManagerHelper.cs
- QilTernary.cs
- RequestCacheManager.cs
- FigureHelper.cs
- AdapterUtil.cs
- Keyboard.cs
- XhtmlTextWriter.cs
- BitmapDownload.cs
- ThreadPool.cs
- TimeSpan.cs
- InputBinder.cs
- ServiceMemoryGates.cs
- PointCollection.cs
- CacheDict.cs
- DataGridViewCheckBoxColumn.cs
- StateDesigner.TransitionInfo.cs
- MappingModelBuildProvider.cs
- Registry.cs
- HostingEnvironmentSection.cs
- KeySpline.cs
- XmlQueryType.cs
- relpropertyhelper.cs
- DropShadowBitmapEffect.cs
- UnsafePeerToPeerMethods.cs
- FilterException.cs
- ConfigsHelper.cs