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之前添加事件处理程序。 在构造 XML 树之前,无法获取对 XObject 的引用。 这意味着在 XML 树的功能构造过程中,不会收到事件。

修改其中一个事件中的 XML 树时应小心,因为这样做可能会导致意外结果。 例如,如果收到事件 Changing ,并在处理事件时从树中删除节点,则可能不会收到该 Changed 事件。 处理事件时,修改 XML 树而不是包含接收事件的节点的 XML 树有效;修改同一树甚至有效,前提是修改不会影响引发事件的特定节点。 但是,如果修改包含接收事件的节点的树区域,则收到的事件和对树的影响是未定义的。

适用于

另请参阅