C# 将AvaloneEdit绑定到XML
我在我的WPF项目中使用了一个AvaloneEdit控件,并将其与XML语法突出显示一起使用。我只是将其用作XML编辑器(不需要侧面的树视图或其他任何东西)。我想要的是:C# 将AvaloneEdit绑定到XML,c#,.net,wpf,xml,avalonedit,C#,.net,Wpf,Xml,Avalonedit,我在我的WPF项目中使用了一个AvaloneEdit控件,并将其与XML语法突出显示一起使用。我只是将其用作XML编辑器(不需要侧面的树视图或其他任何东西)。我想要的是: 将其绑定到某种XML数据结构,并在删除/更新/删除节点时获取通知 使用基于XSD文件的自动遵从 我看到新的AvalonEdit有一个ICSharpCode.AvalonEdit.Xmlnamepsace,但我不知道如何根据自己的需要使用它。有什么建议吗?我知道如何做第一部分(我假设您可以使用LINQ(即.NET 3.5或更高版
我看到新的AvalonEdit有一个
ICSharpCode.AvalonEdit.Xml
namepsace,但我不知道如何根据自己的需要使用它。有什么建议吗?我知道如何做第一部分(我假设您可以使用LINQ(即.NET 3.5或更高版本),这只是一个使用一些XLINQ并连接两个已更改/更改的事件的问题,如下所示:
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("<books><book>Gone with the wind</book></books>");
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()));
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml.Linq;
使用System.Collections.ObjectModel;
使用System.Reactive.Linq;
命名空间控制台应用程序1
{
班级计划
{
公共静态XDocument文档;
静态void Main(字符串[]参数)
{
doc=XDocument.Parse(“乱世佳人”);
单据变更+=单据变更;
单据变动+=单据变动;
打印结果();
XElement新元素=新XElement(“书”、“金银岛”);
doc.Elements().First().Add(新元素);
newElement.Remove();//从父级删除此noe
Console.ReadLine();
}
静态无效文档更改(对象发送方,XObjectChangeEventArgs e)
{
结果(e);
}
静态无效文档已更改(对象发送方,XObjectChangeEventArgs e)
{
结果(e);
}
公共静态无效PrintChangeResults(XObjectChangeEventArgs e)
{
WriteLine(string.Format(“更改为{0},文档现在有{1}个元素”,
e、 ObjectChange,doc.Elements().First().Elements().Count());
}
公共静态无效打印结果()
{
WriteLine(string.Format(“文档现在有{0}个元素”,
doc.Elements().First().Elements().Count());
}
}
}
这将产生如下输出
文档现在有1个元素
更改已添加,文档现在有1个元素
更改被添加,文档现在有2个元素
更改被删除,文档现在有2个元素
更改已删除,文档现在有1个元素
因此,这将使您达到1/2的效果(前提是您可以使用LINQ)尝试使用-将很快支持语法突出显示。。。