Поделиться через


XObject.Changing Событие

Определение

Возникновение в случае возможного изменения данного XObject или одного из его подчиненных элементов.

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) 

Тип события

Примеры

В следующем примере обработчик событий добавляется в корневой элемент XML-дерева. Затем он изменяет дерево, в результате чего LINQ to XML вызывает некоторые события.

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  

В этом примере выводятся следующие данные:

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

Комментарии

События возникают только при изменении XML-дерева, а не при создании XML-дерева. Необходимо добавить обработчик событий в событие, прежде чем получать события, и вы не сможете добавить обработчик событий, прежде чем у вас будет ссылка на XObject. Невозможно получить ссылку на XObject до создания XML-дерева. Это означает, что во время функционального построения XML-дерева события не будут отображаться.

При изменении XML-дерева в одном из этих событий следует соблюдать осторожность, так как это может привести к непредвиденным результатам. Например, если вы получаете Changing событие и во время обработки события удаляете узел из дерева, событие может не получить Changed . При обработке события допустимо изменить XML-дерево, отличное от того, которое содержит узел, получающий событие; можно даже изменять то же дерево, если изменения не влияют на конкретные узлы, на которых было создано событие. Однако при изменении области дерева, содержащего узел, принимающий событие, полученные события и влияние на дерево будут неопределенными.

Применяется к

См. также раздел