XObjectChange 枚举

定义

XObject 发生事件时指定事件类型。

public enum class XObjectChange
public enum XObjectChange
type XObjectChange = 
Public Enum XObjectChange
继承
XObjectChange

字段

Add 0

XObject 已经或将要添加到 XContainer

Name 2

XObject 已经或将要重命名。

Remove 1

XObject 已经或将要从 XContainer 中移除。

Value 3

XObject 的值已经或将要更改。 此外,在序列化空元素过程中进行的更改(从空标记更改为开始/结束标记对,反之亦然)会引发此事件。

示例

以下示例通过将 元素添加到树中来引发 事件。

XElement root = new XElement("Root", "content");  
root.Changing += (sender, e) =>  
    {  
        Console.WriteLine("Changing event raised");  
        Console.WriteLine("  Sender: " + sender.GetType());  
        Console.WriteLine("  Changing: " + e.ObjectChange);  
    };  
root.Changed += (sender, e) =>  
    {  
        Console.WriteLine("Changed event raised");  
        Console.WriteLine("  Sender: " + sender.GetType());  
        Console.WriteLine("  Changed: " + e.ObjectChange);  
    };  
root.Add(new XElement("Child", "child content"));  

该示例产生下面的输出:

Changing event raised  
  Sender: System.Xml.Linq.XElement  
  Changing: Add  
Changed event raised  
  Sender: System.Xml.Linq.XElement  
  Changed: Add  

下面的示例通过从树中删除 元素来引发 事件。

XElement root = new XElement("Root",  
    new XElement("Child", "content")  
);  
root.Changing += (sender, e) =>  
    {  
        Console.WriteLine("Changing event raised");  
        Console.WriteLine("  Sender: " + sender.GetType());  
        Console.WriteLine("  Changing: " + e.ObjectChange);  
    };  
root.Changed += (sender, e) =>  
    {  
        Console.WriteLine("Changed event raised");  
        Console.WriteLine("  Sender: " + sender.GetType());  
        Console.WriteLine("  Changed: " + e.ObjectChange);  
    };  
root.Element("Child").Remove();  

该示例产生下面的输出:

Changing event raised  
  Sender: System.Xml.Linq.XElement  
  Changing: Remove  
Changed event raised  
  Sender: System.Xml.Linq.XElement  
  Changed: Remove  

下面的示例通过更改元素的名称引发 事件。

XElement root = new XElement("Root", "content");  
root.Changing += (sender, e) =>  
    {  
        Console.WriteLine("Changing event raised");  
        Console.WriteLine("  Sender: " + sender.GetType());  
        Console.WriteLine("  Changing: " + e.ObjectChange);  
    };  
root.Changed += (sender, e) =>  
    {  
        Console.WriteLine("Changed event raised");  
        Console.WriteLine("  Sender: " + sender.GetType());  
        Console.WriteLine("  Changed: " + e.ObjectChange);  
    };  
root.Name = "NewName";  

该示例产生下面的输出:

Changing event raised  
  Sender: System.Xml.Linq.XElement  
  Changing: Name  
Changed event raised  
  Sender: System.Xml.Linq.XElement  
  Changed: Name  

以下示例通过设置 属性的值引发 事件。

XElement root = new XElement("Root",  
    new XAttribute("Att", "att value")  
);  
root.Changing += (sender, e) =>  
    {  
        Console.WriteLine("Changing event raised");  
        Console.WriteLine("  Sender: " + sender.GetType());  
        Console.WriteLine("  Changing: " + e.ObjectChange);  
    };  
root.Changed += (sender, e) =>  
    {  
        Console.WriteLine("Changed event raised");  
        Console.WriteLine("  Sender: " + sender.GetType());  
        Console.WriteLine("  Changed: " + e.ObjectChange);  
    };  
root.FirstAttribute.Value = "new contents";  

该示例产生下面的输出:

Changing event raised  
  Sender: System.Xml.Linq.XAttribute  
  Changing: Value  
Changed event raised  
  Sender: System.Xml.Linq.XAttribute  
  Changed: Value  

注解

enum 指定为 XObject引发事件时的事件类型。

修改 XML 树的所有操作都分解为一系列基元。 有四种类型的基元。 (添加和删除) 对集合执行操作的两个基元。 其中两个 (名称和值) 作用实例。 其中每个基元都有相应的事件。

修改其中一个事件中的 XML 树时应小心,因为这样做可能会导致意外结果。 例如,如果收到事件 Changing ,并且正在处理该事件时从树中删除节点,则可能不会收到该 Changed 事件。 处理事件时,修改包含接收事件的节点的 XML 树是有效的;修改同一树甚至有效,前提是修改不会影响引发事件的特定节点。 但是,如果修改包含接收事件的节点的树区域,则收到的事件和对树的影响是不确定的。

适用于

另请参阅