XObject.Changing Evento

Definição

Acionado quando esse XObject ou um de seus descendentes está prestes a mudar.

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) 

Tipo de evento

Exemplos

O exemplo a seguir adiciona um manipulador de eventos ao elemento raiz de uma árvore XML. Em seguida, ele modifica a árvore, fazendo com que LINQ to XML gere alguns eventos.

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  

Esse exemplo gera a saída a seguir:

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

Comentários

Os eventos são gerados somente a partir da modificação de uma árvore XML, não da construção de uma árvore XML. Você precisa adicionar um manipulador de eventos a um evento antes de receber eventos e não pode adicionar um manipulador de eventos antes de ter uma referência a um XObject. Você não pode obter uma referência a um XObject antes que a árvore XML seja construída. Isso significa que, durante a construção funcional de uma árvore XML, você não receberá eventos.

Você deve ter cuidado ao modificar uma árvore XML dentro de um desses eventos, pois fazer isso pode levar a resultados inesperados. Por exemplo, se você receber um Changing evento e, enquanto o evento estiver sendo processado, você removerá o nó da árvore, talvez não receba o Changed evento. Quando um evento está sendo processado, é válido modificar uma árvore XML diferente daquela que contém o nó que está recebendo o evento; É válido até mesmo modificar a mesma árvore, desde que as modificações não afetem os nós específicos nos quais o evento foi gerado. No entanto, se você modificar a área da árvore que contém o nó que recebe o evento, os eventos recebidos e o impacto na árvore serão indefinidos.

Aplica-se a

Confira também