XObject.Changing Событие
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Вызывается, когда это XObject или любой из его потомков собираются изменить.
public:
event EventHandler<System::Xml::Linq::XObjectChangeEventArgs ^> ^ Changing;
public event EventHandler<System.Xml.Linq.XObjectChangeEventArgs> Changing;
member this.Changing : EventHandler<System.Xml.Linq.XObjectChangeEventArgs>
Public Custom Event Changing As EventHandler(Of XObjectChangeEventArgs)
Тип события
Примеры
В следующем примере обработчик событий добавляется в корневой элемент дерева XML. Затем он изменяет дерево, что приводит к возникновению некоторых событий LINQ to XML.
XElement root = new XElement("Root", "content");
root.Changing += new EventHandler<XObjectChangeEventArgs>(
(sender, cea) =>
{
Console.WriteLine("Changing event raised");
XElement xSender = (XElement)sender;
Console.WriteLine(" Sender: {0}", xSender.Name);
Console.WriteLine(" ObjectChange: {0}", cea.ObjectChange);
}
);
root.Changed += new EventHandler<XObjectChangeEventArgs>(
(sender, cea) =>
{
Console.WriteLine("Changed event raised");
XElement xSender = (XElement)sender;
Console.WriteLine(" Sender: {0}", xSender.Name);
Console.WriteLine(" ObjectChange: {0}", cea.ObjectChange);
}
);
root.Add(new XElement("Child", "child content"));
Module Module1
WithEvents root As XElement = <Root>content</Root>
Sub Main()
root.Add(<Child>child content</Child>)
End Sub
Private Sub root_Changing( _
ByVal sender As Object, _
ByVal e As XObjectChangeEventArgs) _
Handles root.Changing
Dim xSender As XElement = CType(sender, XElement)
Console.WriteLine("Changing event raised")
Console.WriteLine(" Sender: {0}", xSender.Name)
Console.WriteLine(" ObjectChange: {0}", e.ObjectChange)
End Sub
Private Sub root_Changed( _
ByVal sender As Object, _
ByVal e As XObjectChangeEventArgs) _
Handles root.Changed
Dim xSender As XElement = CType(sender, XElement)
Console.WriteLine("Changed event raised")
Console.WriteLine(" Sender: {0}", xSender.Name)
Console.WriteLine(" ObjectChange: {0}", e.ObjectChange)
End Sub
End Module
В примере получается следующий вывод.
Changing event raised
Sender: Child
ObjectChange: Add
Changed event raised
Sender: Child
ObjectChange: Add
Комментарии
События создаются только из изменения XML-дерева, а не из построения XML-дерева. Перед получением событий необходимо добавить обработчик событий, прежде чем вы сможете получать события, и вы не можете добавить обработчик событий, прежде чем иметь ссылку на событие XObject. Невозможно получить ссылку на XObject дерево XML. Это означает, что во время функционального построения дерева XML вы не получите события.
При изменении xml-дерева в одном из этих событий следует внимательно следить за тем, что это может привести к непредвиденным результатам. Например, если вы получаете Changing событие, а во время обработки события удаляете узел из дерева, возможно, событие не будет получено Changed . При обработке события допустимо изменить дерево XML, отличное от дерева, содержащего узел, получающий событие; Это даже допустимо для изменения того же дерева, если изменения не влияют на определенные узлы, на которые возникло событие. Однако если изменить область дерева, содержащей узел, получающий событие, события, полученные и влияние на дерево, не определены.