Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将AvaloneEdit绑定到XML_C#_.net_Wpf_Xml_Avalonedit - Fatal编程技术网

C# 将AvaloneEdit绑定到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或更高版

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

  • 将其绑定到某种XML数据结构,并在删除/更新/删除节点时获取通知
  • 使用基于XSD文件的自动遵从

  • 我看到新的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)

    尝试使用-将很快支持语法突出显示。。。