XObjectChange 列挙型

定義

XObject に対してイベントが生成されるときのイベントの種類を指定します。

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

フィールド

Add 0

XObjectXContainer に追加されたか、これから追加されます。

Name 2

XObject の名前が変更されたか、これから変更されます。

Remove 1

XObjectXContainer から削除されたか、これから削除されます。

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 ツリーを変更するすべての操作は、一連のプリミティブに分割されます。 プリミティブには 4 種類があります。 2 つのプリミティブ (Add と Remove) がコレクションに対して動作します。 そのうちの 2 つ (名前と値) はインスタンスに対して機能します。 これらの各プリミティブに対応するイベントがあります。

これらのイベントの 1 つ内で XML ツリーを変更する場合は、予期しない結果が発生する可能性があるため、注意が必要です。 たとえば、イベントを Changing 受信し、イベントの処理中にツリーからノードを削除した場合、イベントを Changed 受信しない可能性があります。 イベントが処理されている場合、イベントを受信しているノードを含む XML ツリー以外の XML ツリーを変更することは有効です。変更がイベントが発生した特定のノードに影響を与えない場合は、同じツリーを変更しても有効です。 ただし、イベントを受信するノードを含むツリーの領域を変更した場合、受け取るイベントとツリーへの影響は未定義になります。

適用対象

こちらもご覧ください