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