質問: AvalonEditをXMLにバインドする 私はWPFプロジェクトでAvalonEditコントロールを使用していますが、XML構文の強調表示でそれを使用します。私はちょうどXMLエディタとして使用しています(側面やその他のツリービューは必要ありません)。私が欲しいのは: 1. ある種類のXMLデータ構造にバインドし、ノードが削除/更新/削除されているときに通知を受け取ります。 2. XSDファイルに基づいて自動合併を使用します。 新しいAvalonEditにはネームスペースの `ICSharpCode.AvalonEdit.Xml` という名前が付いていましたが、自分のニーズにどのように使用するのか把握できませんでした。助言がありますか?
回答: 私は最初の部分を行う方法を知っています(私はあなたが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を利用することができます提供する必要があります)