c# - 将 AvalonEdit 绑定(bind)到 XML

标签 c# .net wpf xml avalonedit

我在我的 WPF 项目中使用 AvalonEdit 控件,我将它与 XML 语法突出显示一起使用。我只是将它用作 XML 编辑器(不需要侧面的 TreeView 或其他任何东西)。我想要的是:

  1. 将其绑定(bind)到某种 XML 数据结构,并在删除/更新/删除节点时获取通知。
  2. 使用基于 XSD 文件的自动编译。

我看到新的 AvalonEdit 有一个 ICSharpCode.AvalonEdit.Xml 命名空间,但我不知道如何使用它来满足我自己的需要。有什么建议吗?

最佳答案

我知道如何做第 1 部分(我假设您可以使用 LINQ(即拥有 .NET 3.5 或更高版本),这只是使用一些 XLINQ 并连接 2 个事件 Changed/Changing 的问题,如下所示:

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()));
        }
    }
}

这将导致类似下面的输出

文档现在有 1 个元素 更改为添加,文档现在有 1 个元素 更改为添加,文档现在有 2 个元素 更改为删除,文档现在有 2 个元素 更改为删除,文档现在有 1 个元素

所以这应该让你到达那里的 1/2 方式(假设你可以使用 LINQ)

关于c# - 将 AvalonEdit 绑定(bind)到 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8267577/

相关文章:

c# - Xamarin 在 ListView 中不使用 DataTemplateSelector

c# - 根据其他列表上的索引从表中选择行

.net - Process.Start(url) 在 Windows 8/Chrome 上损坏 - 有替代方案吗?

wpf - 3D 地球仪旋转问题

c# - 在主窗口边界之上/之外显示 wpf 内容

c# - 管理网格中的列跨度

c# - C# 中的内部迭代器

C#:有没有更好的方法来替换特殊字符并进行比较

.net - 是否有一个库可以完成.Net的找平器功能?

c# - 如何在 C#.NET 中从本地 IP 解析主机名?