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, отличное от дерева, содержащего узел, получающий событие; Это даже допустимо для изменения того же дерева, если изменения не влияют на определенные узлы, на которые возникло событие. Однако если изменить область дерева, содержащей узел, получающий событие, события, полученные и влияние на дерево, не определены.

Применяется к

См. также раздел