XObject.Changing Zdarzenie

Definicja

Podniesione, gdy ten XObject lub którykolwiek z jego elementów potomnych ma ulec zmianie.

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) 

Typ zdarzenia

Przykłady

Poniższy przykład dodaje procedurę obsługi zdarzeń do elementu głównego drzewa XML. Następnie modyfikuje drzewo, co powoduje, że LINQ to XML zgłosić niektóre zdarzenia.

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  

Ten przykład generuje następujące wyniki:

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

Uwagi

Zdarzenia są wywoływane tylko z modyfikacji drzewa XML, a nie z konstrukcji drzewa XML. Musisz dodać procedurę obsługi zdarzeń do zdarzenia przed odebraniem zdarzeń i nie można dodać procedury obsługi zdarzeń przed odwołaniem do elementu XObject. Nie można uzyskać odwołania do XObject elementu przed skonstruowaniem drzewa XML. Oznacza to, że podczas funkcjonalnej konstrukcji drzewa XML nie będą odbierane zdarzenia.

Podczas modyfikowania drzewa XML w ramach jednego z tych zdarzeń należy zachować ostrożność, ponieważ może to prowadzić do nieoczekiwanych wyników. Jeśli na przykład otrzymasz Changing zdarzenie, a podczas przetwarzania zdarzenia usuniesz węzeł z drzewa, może nie zostać odebrane Changed zdarzenie. Po przetworzeniu zdarzenia ważne jest zmodyfikowanie drzewa XML innego niż to, które zawiera węzeł odbierający zdarzenie; Jest nawet ważne, aby zmodyfikować to samo drzewo pod warunkiem, że modyfikacje nie wpływają na określone węzły, na których zostało podniesione zdarzenie. Jeśli jednak zmodyfikujesz obszar drzewa zawierającego węzeł odbierający zdarzenie, zdarzenia otrzymane i wpływ na drzewo są niezdefiniowane.

Dotyczy

Zobacz też