XObject.Changing Zdarzenie
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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.