XObject.Changing Evento
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Se genera cuando este XObject o cualquiera de sus descendientes está a punto de cambiar.
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
Ejemplos
En el ejemplo siguiente se agrega un controlador de eventos al elemento raíz de un árbol XML. A continuación, modifica el árbol, lo que hace que LINQ to XML genere algunos 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
Este ejemplo produce el siguiente resultado:
Changing event raised
Sender: Child
ObjectChange: Add
Changed event raised
Sender: Child
ObjectChange: Add
Comentarios
Los eventos solo se generan a partir de la modificación de un árbol XML, no de la construcción de un árbol XML. Tiene que agregar un controlador de eventos a un evento antes de poder recibir eventos y no puede agregar un controlador de eventos antes de tener una referencia a .XObject No se puede obtener una referencia a un XObject antes de que se construya el árbol XML. Esto significa que durante la construcción funcional de un árbol XML, no recibirá eventos.
Debe tener cuidado al modificar un árbol XML dentro de uno de estos eventos, ya que esto podría dar lugar a resultados inesperados. Por ejemplo, si recibe un Changing evento y mientras se procesa el evento, quite el nodo del árbol, es posible que no reciba el Changed evento. Cuando se procesa un evento, es válido modificar un árbol XML distinto del que contiene el nodo que recibe el evento; incluso es válido modificar el mismo árbol siempre que las modificaciones no afecten a los nodos específicos en los que se generó el evento. Sin embargo, si modifica el área del árbol que contiene el nodo que recibe el evento, los eventos que recibe y el impacto en el árbol no están definidos.