XObject.Changing Händelse

Definition

Upphöjt när den här XObject eller någon av dess underordnade är på väg att ändras.

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) 

Händelsetyp

Exempel

I följande exempel läggs en händelsehanterare till i rotelementet i ett XML-träd. Det ändrar sedan trädet, vilket gör att LINQ till XML genererar vissa händelser.

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

Det här exemplet genererar följande utdata:

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

Kommentarer

Händelser genereras endast från ändring av ett XML-träd, inte från konstruktion av ett XML-träd. Du måste lägga till en händelsehanterare i en händelse innan du kan ta emot händelser och du kan inte lägga till en händelsehanterare innan du har en referens till en XObject. Du kan inte hämta en referens till en XObject innan XML-trädet har konstruerats. Det innebär att du inte får händelser under funktionell konstruktion av ett XML-träd.

Du bör vara försiktig när du ändrar ett XML-träd inom någon av dessa händelser, eftersom detta kan leda till oväntade resultat. Om du till exempel får en Changing händelse och när händelsen bearbetas tar du bort noden från trädet, men du kanske inte får händelsen Changed . När en händelse bearbetas är det giltigt att ändra ett annat XML-träd än det som innehåller den nod som tar emot händelsen. Det är till och med giltigt att ändra samma träd, förutsatt att ändringarna inte påverkar de specifika noder som händelsen skapades på. Men om du ändrar området i trädet som innehåller noden som tar emot händelsen, är de händelser som du får och påverkan på trädet odefinierade.

Gäller för

Se även