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를 갖기 전에 이벤트 처리기를 추가할 수 없습니다. XML 트리가 생성되기 전에는 에 XObject 대한 참조를 가져올 수 없습니다. 즉, XML 트리를 작동하는 동안 이벤트를 수신하지 않습니다.

이러한 이벤트 중 하나에서 XML 트리를 수정할 때는 예기치 않은 결과가 발생할 수 있으므로 주의해야 합니다. 예를 들어 이벤트를 수신 Changing 하고 이벤트가 처리되는 동안 트리에서 노드를 제거하면 이벤트가 수신 Changed 되지 않을 수 있습니다. 이벤트가 처리되는 경우 이벤트를 수신하는 노드가 포함된 XML 트리가 아닌 다른 XML 트리를 수정하는 것이 유효합니다. 수정이 이벤트가 발생한 특정 노드에 영향을 미치지 않는 경우 동일한 트리를 수정하는 것도 유효합니다. 그러나 이벤트를 수신하는 노드가 포함된 트리의 영역을 수정하는 경우 수신하는 이벤트와 트리에 미치는 영향은 정의되지 않습니다.

적용 대상

추가 정보