Condividi tramite


XObject.Changing Evento

Definizione

Viene generato quando XObject o uno dei discendenti sta per essere modificato.

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) 

Tipo evento

Esempio

Nell'esempio seguente viene aggiunto un gestore eventi all'elemento radice di un albero XML. Modifica quindi l'albero, causando LINQ to XML generare alcuni eventi.

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  

Nell'esempio viene prodotto l'output seguente:

Changing event raised  
  Sender: Child  
  ObjectChange: Add  
Changed event raised  
  Sender: Child  
  ObjectChange: Add  

Commenti

Gli eventi vengono generati solo dalla modifica di un albero XML, non dalla costruzione di un albero XML. È necessario aggiungere un gestore eventi a un evento prima di poter ricevere gli eventi e non è possibile aggiungere un gestore eventi prima di avere un riferimento a un oggetto XObject. Non è possibile ottenere un riferimento a un XObject oggetto prima che venga costruito l'albero XML. Ciò significa che durante la costruzione funzionale di un albero XML non si riceveranno eventi.

È consigliabile prestare attenzione quando si modifica un albero XML all'interno di uno di questi eventi, perché questa operazione potrebbe causare risultati imprevisti. Ad esempio, se si riceve un Changing evento e durante l'elaborazione dell'evento si rimuove il nodo dall'albero, è possibile che l'evento Changed non venga ricevuto. Quando viene elaborato un evento, è valido modificare un albero XML diverso da quello che contiene il nodo che riceve l'evento; è anche valido modificare lo stesso albero a condizione che le modifiche non influiscano sui nodi specifici in cui è stato generato l'evento. Tuttavia, se si modifica l'area dell'albero che contiene il nodo che riceve l'evento, gli eventi ricevuti e l'impatto sull'albero non sono definiti.

Si applica a

Vedi anche