annotate Source/EditableObjects/EditableXmlDocument.cs @ 6:11b6da379593

Исправлена странная ошибка при использовании OfType<...>().Where(...)
author cin
date Mon, 05 Dec 2016 05:50:52 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Collections;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Xml;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.TypeBuilder;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 namespace BLToolkit.EditableObjects
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 [Serializable]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 public class EditableXmlDocument: IEditable, ISetParent, IMemberwiseEditable, IPrintDebugState
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 private Stack _changedNodes;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 private XmlDocument _original;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 private XmlDocument _current;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 private IPropertyChanged _parent;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 private PropertyInfo _propertyInfo;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 public EditableXmlDocument()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 : this(new XmlDocument())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 public EditableXmlDocument(XmlDocument value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 _changedNodes = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 _current = value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 _original = value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 StartXmlDocTracking();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 [GetValue, SetValue]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 public XmlDocument Value
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 get { return _current; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 set
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 if (_current == value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 return;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 if (_current == _original)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 StopXmlDocTracking();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 // Drop changes, if any.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 if (_changedNodes != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 _changedNodes.Clear();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 _current = value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 if (_current == _original)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 StartXmlDocTracking();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 private void StartXmlDocTracking()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 if (_current == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 return;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 _current.NodeInserted += HandleNodeChanged;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 _current.NodeRemoved += HandleNodeChanged;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 _current.NodeChanged += HandleNodeChanged;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 private void StopXmlDocTracking()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 if (_current == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 return;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 _current.NodeInserted -= HandleNodeChanged;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 _current.NodeRemoved -= HandleNodeChanged;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 _current.NodeChanged -= HandleNodeChanged;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 private void HandleNodeChanged(object sender, XmlNodeChangedEventArgs ea)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 if (ea.Action == XmlNodeChangedAction.Change && ea.NewValue == ea.OldValue)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 // A void change can be ignored.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 return;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 if (_changedNodes == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 _changedNodes = new Stack();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 _changedNodes.Push(new XmlNodeTrackBack(ea));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 // Propagate changes to parent object, if set.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 if (_parent != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 _parent.OnPropertyChanged(_propertyInfo);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 #region IEditable Members
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 public void AcceptChanges()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 if (_original != _current)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 _original = _current;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 StartXmlDocTracking();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 // Let them go away.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 if (_changedNodes != null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 _changedNodes.Clear();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 public void RejectChanges()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 if (_original != _current)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 _current = _original;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 StartXmlDocTracking();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 else if (_changedNodes != null && _changedNodes.Count > 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 // Don't fall into an infinite loop.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 StopXmlDocTracking();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 // A Stack enumerates from back to front.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 foreach (XmlNodeTrackBack nodeTrackBack in _changedNodes)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 switch (nodeTrackBack.Action)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 case XmlNodeChangedAction.Insert:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 if (nodeTrackBack.Node.NodeType == XmlNodeType.Attribute)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 ((XmlElement)nodeTrackBack.Value).Attributes.Remove((XmlAttribute)nodeTrackBack.Node);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 ((XmlNode)nodeTrackBack.Value).RemoveChild(nodeTrackBack.Node);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 case XmlNodeChangedAction.Remove:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 // NB: The order of children nodes may change.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 if (nodeTrackBack.Node.NodeType == XmlNodeType.Attribute)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 ((XmlElement)nodeTrackBack.Value).Attributes.Append((XmlAttribute)nodeTrackBack.Node);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 ((XmlNode)nodeTrackBack.Value).AppendChild(nodeTrackBack.Node);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 case XmlNodeChangedAction.Change:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 nodeTrackBack.Node.Value = (string)nodeTrackBack.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 _changedNodes.Clear();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 StartXmlDocTracking();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 public bool IsDirty
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 get
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 if (_current == _original)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 return _changedNodes != null && _changedNodes.Count > 0;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 if (_current == null || _original == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 return true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 return _current.InnerXml.TrimEnd() != _original.InnerXml.TrimEnd();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 #region IMemberwiseEditable Members
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 public bool AcceptMemberChanges(PropertyInfo propertyInfo, string memberName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 if (memberName != propertyInfo.Name)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 AcceptChanges();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 return true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 public bool RejectMemberChanges(PropertyInfo propertyInfo, string memberName)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 if (memberName != propertyInfo.Name)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 RejectChanges();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 return true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 public bool IsDirtyMember(PropertyInfo propertyInfo, string memberName, ref bool isDirty)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 if (memberName != propertyInfo.Name)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 isDirty = IsDirty;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 return true;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 public void GetDirtyMembers(PropertyInfo propertyInfo, ArrayList list)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 if (IsDirty)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 list.Add(propertyInfo);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 #region IPrintDebugState Members
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 public void PrintDebugState(PropertyInfo propertyInfo, ref string str)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 str += string.Format("{0,-20} {1} {2,-80}\r\n",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 propertyInfo.Name, IsDirty? "*": " ", _current != null? _current.OuterXml: "(null)");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 #region ISetParent Members
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 public void SetParent(object parent, PropertyInfo propertyInfo)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 _parent = parent as IPropertyChanged;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 _propertyInfo = propertyInfo;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 #region Inner types
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 private struct XmlNodeTrackBack
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 public readonly XmlNode Node;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 public readonly XmlNodeChangedAction Action;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 public readonly object Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 public XmlNodeTrackBack(XmlNodeChangedEventArgs ea)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245 Node = ea.Node;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 Action = ea.Action;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 switch(ea.Action)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 case XmlNodeChangedAction.Insert:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 Value = ea.NewParent;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 case XmlNodeChangedAction.Remove:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 Value = ea.OldParent;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 case XmlNodeChangedAction.Change:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 Value = ea.OldValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 break;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258 default:
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 throw new ArgumentOutOfRangeException("ea", ea.Action, string.Format("Unknown XmlNodeChangedAction"));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 }