Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- ConsoleKeyInfo.cs
- Configuration.cs
- PropertyRecord.cs
- CngProvider.cs
- ChannelSinkStacks.cs
- Transactions.cs
- FileDialog_Vista_Interop.cs
- SqlInternalConnectionSmi.cs
- DataPointer.cs
- NegationPusher.cs
- Tokenizer.cs
- StaticDataManager.cs
- Point3DConverter.cs
- Timer.cs
- QueryNode.cs
- ServiceOperationListItem.cs
- TypeUsageBuilder.cs
- ApplicationFileCodeDomTreeGenerator.cs
- Misc.cs
- WSHttpBindingElement.cs
- ArrayConverter.cs
- AlternationConverter.cs
- _NTAuthentication.cs
- ConversionContext.cs
- CheckBoxPopupAdapter.cs
- FlowDocumentReader.cs
- NonClientArea.cs
- MdiWindowListItemConverter.cs
- ViewManager.cs
- VScrollProperties.cs
- DataSourceControlBuilder.cs
- DataGridViewControlCollection.cs
- DrawListViewColumnHeaderEventArgs.cs
- AnnotationResourceChangedEventArgs.cs
- documentsequencetextpointer.cs
- XmlTextEncoder.cs
- StrokeCollection2.cs
- AssertUtility.cs
- SynchronizedDispatch.cs
- Latin1Encoding.cs
- SoundPlayerAction.cs
- Matrix.cs
- SafeRightsManagementQueryHandle.cs
- AssertFilter.cs
- ServiceDescriptionReflector.cs
- FunctionImportMapping.cs
- EventLog.cs
- GeometryGroup.cs
- InstanceContextMode.cs
- JulianCalendar.cs
- Utility.cs
- EntityDataSourceWrapperCollection.cs
- CallbackTimeoutsElement.cs
- RawStylusInput.cs
- SystemIcmpV6Statistics.cs
- ping.cs
- ListViewCancelEventArgs.cs
- ResourceType.cs
- OrthographicCamera.cs
- ContactManager.cs
- TextContainerChangedEventArgs.cs
- DocumentSequenceHighlightLayer.cs
- Parser.cs
- Facet.cs
- InternalConfigConfigurationFactory.cs
- PictureBox.cs
- ReferencedType.cs
- PrintControllerWithStatusDialog.cs
- GeometryHitTestResult.cs
- Selection.cs
- BreadCrumbTextConverter.cs
- GeneralTransformGroup.cs
- ReferenceEqualityComparer.cs
- coordinatorfactory.cs
- FileChangesMonitor.cs
- TextParagraphProperties.cs
- ReflectionUtil.cs
- ImageSourceConverter.cs
- SmtpException.cs
- ConvertTextFrag.cs
- DataGridViewCellCollection.cs
- MsmqIntegrationOutputChannel.cs
- OperationAbortedException.cs
- ToolBar.cs
- HMAC.cs
- XmlSignificantWhitespace.cs
- elementinformation.cs
- HttpCachePolicy.cs
- PreProcessInputEventArgs.cs
- SizeAnimationUsingKeyFrames.cs
- StreamGeometry.cs
- WeakReference.cs
- EmbeddedObject.cs
- ColumnTypeConverter.cs
- SwitchCase.cs
- SqlProcedureAttribute.cs
- ThaiBuddhistCalendar.cs
- SyndicationSerializer.cs
- TextDecorationUnitValidation.cs
- Region.cs