Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- WhitespaceSignificantCollectionAttribute.cs
- GridViewActionList.cs
- AppDomainUnloadedException.cs
- AttributeData.cs
- CompiledRegexRunner.cs
- versioninfo.cs
- Int16.cs
- TraceShell.cs
- TagPrefixInfo.cs
- PersonalizationProviderCollection.cs
- ViewSimplifier.cs
- Win32NamedPipes.cs
- HttpServerVarsCollection.cs
- StronglyTypedResourceBuilder.cs
- HtmlAnchor.cs
- FrugalMap.cs
- ControlIdConverter.cs
- X500Name.cs
- Int16AnimationUsingKeyFrames.cs
- OleDbPropertySetGuid.cs
- Compiler.cs
- UnmanagedBitmapWrapper.cs
- WizardPanel.cs
- XmlSchemaDatatype.cs
- DataTableReaderListener.cs
- ObjectViewListener.cs
- DetailsView.cs
- MessageSecurityVersion.cs
- SqlXml.cs
- VisualBasicExpressionConverter.cs
- DebuggerAttributes.cs
- MenuItemCollection.cs
- AccessorTable.cs
- MimeWriter.cs
- Evidence.cs
- ParameterModifier.cs
- IconHelper.cs
- ToolTip.cs
- ImageSource.cs
- WebContext.cs
- ClientSettingsSection.cs
- PassportPrincipal.cs
- FixedSOMContainer.cs
- PropertyFilterAttribute.cs
- TableDetailsRow.cs
- RowCache.cs
- WindowsScrollBarBits.cs
- MenuItemBindingCollection.cs
- DataContext.cs
- BlockUIContainer.cs
- RequestTimeoutManager.cs
- Graph.cs
- TreeBuilderBamlTranslator.cs
- DecodeHelper.cs
- GeneratedContractType.cs
- X509ChainPolicy.cs
- InputScopeNameConverter.cs
- MimeBasePart.cs
- IntSumAggregationOperator.cs
- BitmapScalingModeValidation.cs
- GetImportedCardRequest.cs
- TextBounds.cs
- OdbcCommandBuilder.cs
- DataGridViewCellMouseEventArgs.cs
- ConstraintStruct.cs
- ActivityBindForm.Designer.cs
- PageParser.cs
- RefreshResponseInfo.cs
- HttpDigestClientElement.cs
- TypeConstant.cs
- TcpConnectionPool.cs
- TreeWalkHelper.cs
- BufferAllocator.cs
- DataContractSet.cs
- IndividualDeviceConfig.cs
- Rotation3DKeyFrameCollection.cs
- Debugger.cs
- LinkLabel.cs
- TypeForwardedToAttribute.cs
- IntranetCredentialPolicy.cs
- CachedTypeface.cs
- WebPartEditorCancelVerb.cs
- ClientProxyGenerator.cs
- XmlBoundElement.cs
- BasicExpressionVisitor.cs
- SubstitutionResponseElement.cs
- XmlKeywords.cs
- CodeAttributeDeclarationCollection.cs
- CompilerParameters.cs
- TextSchema.cs
- SchemaMapping.cs
- ThicknessConverter.cs
- StateMachineSubscriptionManager.cs
- OdbcError.cs
- XmlAggregates.cs
- xsdvalidator.cs
- _HelperAsyncResults.cs
- AnnotationComponentChooser.cs
- WindowsToolbar.cs
- MasterPage.cs