Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / Data / XmlDataCollection.cs / 1305600 / 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
- GetWinFXPath.cs
- Propagator.Evaluator.cs
- DrawingImage.cs
- AlphaSortedEnumConverter.cs
- SoapAttributeOverrides.cs
- ObjectStateManagerMetadata.cs
- DbDataReader.cs
- SiteMapNodeCollection.cs
- ClientBuildManager.cs
- XmlCompatibilityReader.cs
- SystemDiagnosticsSection.cs
- TrackingMemoryStreamFactory.cs
- ToolStripItemClickedEventArgs.cs
- DelegatingTypeDescriptionProvider.cs
- SafeWaitHandle.cs
- DataGridViewCellStyleBuilderDialog.cs
- SqlInternalConnectionTds.cs
- IndexOutOfRangeException.cs
- SqlRowUpdatedEvent.cs
- XmlILOptimizerVisitor.cs
- OneToOneMappingSerializer.cs
- RangeValidator.cs
- EndpointDispatcherTable.cs
- Pair.cs
- SerializationHelper.cs
- DataGridViewAdvancedBorderStyle.cs
- _FtpDataStream.cs
- OdbcDataReader.cs
- GridViewColumn.cs
- TypeValidationEventArgs.cs
- DockPatternIdentifiers.cs
- MenuItem.cs
- DialogBaseForm.cs
- WebPartCollection.cs
- AnimationTimeline.cs
- DataServiceRequest.cs
- IDispatchConstantAttribute.cs
- SettingsContext.cs
- SqlDataSourceFilteringEventArgs.cs
- XmlSchemaDocumentation.cs
- XmlSerializationGeneratedCode.cs
- SystemSounds.cs
- ColorAnimationUsingKeyFrames.cs
- URLMembershipCondition.cs
- BidPrivateBase.cs
- InkCanvas.cs
- RegexGroup.cs
- XmlTextReaderImplHelpers.cs
- StateItem.cs
- FigureParagraph.cs
- HtmlImage.cs
- HostUtils.cs
- DataGridViewDataConnection.cs
- newinstructionaction.cs
- CompiledScopeCriteria.cs
- FileBasedResourceGroveler.cs
- PaperSource.cs
- StreamWithDictionary.cs
- M3DUtil.cs
- LoaderAllocator.cs
- CaseCqlBlock.cs
- QueryStringParameter.cs
- ClientTargetSection.cs
- SQLBytesStorage.cs
- EmbossBitmapEffect.cs
- Enum.cs
- OutputCacheProviderCollection.cs
- OleDbConnectionFactory.cs
- ComponentEditorPage.cs
- RelativeSource.cs
- DirectionalLight.cs
- Int16Animation.cs
- SqlTriggerContext.cs
- XamlTreeBuilder.cs
- WebGetAttribute.cs
- SmiMetaDataProperty.cs
- TextElementEnumerator.cs
- AudioDeviceOut.cs
- ColorPalette.cs
- PointConverter.cs
- RMPermissions.cs
- httpapplicationstate.cs
- ToolboxBitmapAttribute.cs
- X509SecurityTokenAuthenticator.cs
- ProcessHostConfigUtils.cs
- PrintDialogException.cs
- String.cs
- ColorPalette.cs
- CodeSubDirectoriesCollection.cs
- _NegoStream.cs
- StrongNameMembershipCondition.cs
- _SslState.cs
- OleDbDataReader.cs
- BidirectionalDictionary.cs
- JsonXmlDataContract.cs
- BitmapPalette.cs
- BuildManager.cs
- DynamicScriptObject.cs
- ErrorFormatter.cs
- Qualifier.cs