AvalonEditをXMLにバインドする

私はWPFプロジェクトでAvalonEditコントロールを使用していますが、XML構文の強調表示でそれを使用します。私はちょうどXMLエディタとして使用しています(側面やその他のツリービューは必要ありません)。私が欲しいのは:

  1. ある種類のXMLデータ構造にバインドし、ノードが削除/更新/削除されているときに通知を受け取ります。
  2. XSDファイルに基づいて自動合併を使用します。

新しいAvalonEditにはネームスペースの ICSharpCode.AvalonEdit.Xml という名前が付いていましたが、自分のニーズにどのように使用するのか把握できませんでした。助言がありますか?

2
xmlautocomplete.codeplex.com を使用してください。すぐに構文の強調表示をサポートします...
追加された 著者 Martin Ch,

1 答え

私は最初の部分を行う方法を知っています(私はあなたがLINQを使用できると仮定しています(つまり、.NET 3.5以上を持っています)。それは単にXLINQを使用して2つのイベントを変更/変更するという質問です。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.Collections.ObjectModel;
using System.Reactive.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        public static XDocument doc; 

        static void Main(string[] args)
        {

            doc = XDocument.Parse("Gone with the wind");
            doc.Changed += Doc_Changed;
            doc.Changing += Doc_Changing;

            PrintResults();

            XElement newElement = new XElement("book", "Treasure Island");

            doc.Elements().First().Add(newElement);
            newElement.Remove(); //remove this noe from parent
            Console.ReadLine();
        }

        static void Doc_Changing(object sender, XObjectChangeEventArgs e)
        {
            PrintChangeResults(e);
        }

        static void Doc_Changed(object sender, XObjectChangeEventArgs e)
        {
            PrintChangeResults(e);
        }

        public static void PrintChangeResults(XObjectChangeEventArgs e)
        {
            Console.WriteLine(string.Format("Change was {0}, Document now has {1} elements", 
                e.ObjectChange, doc.Elements().First().Elements().Count()));
        }

        public static void PrintResults()
        {
            Console.WriteLine(string.Format("Document now has {0} elements", 
                doc.Elements().First().Elements().Count()));
        }
    }
}

次のような結果になります

文書には1つの要素があります 変更が追加されました。ドキュメントには1つの要素があります 変更は追加で、文書には2つの要素があります 変更は削除されました。文書には2つの要素があります 変更が削除されました。文書には1つの要素があります

だから、そこにあなたは1/2方法を(あなたがLINQを利用することができます提供する必要があります)

1
追加された