【问题标题】:differences viewer control in .NET.NET 中的差异查看器控件
【发布时间】:2012-01-07 21:35:51
【问题描述】:

我有一个具有挑战性的问题。我的要求就像我有一个 xml 文件,它的值类似于

Name 0,20 
age 21,4 

这就像字段名称值将出现在以下位置。我的 xml 文件中有 100 条这样的记录。我想动态读取这个布局的xml文件。并比较两个不同公司生成的两个输出文件。 Output1 和 Output2... 其中位置的名称和位置的年龄的值将在那里。我想读取这些值并手动向用户显示这些区域的两个文件存在差异。

.net、C# windows、wpf 应用程序中是否有任何动态查看器控件可以在两个文件中显示这些差异?

【问题讨论】:

  • 这看起来不像 XML,或者我不明白你在问什么。
  • @Tigran -> 我也看到了,但不知道怎么说。谢谢。

标签: c# .net wpf silverlight


【解决方案1】:

这不是一个控件,而是一个用c#编写的完整文件差异工具。源代码也可用(CharityWare)。

http://www.menees.com/

可以看源码看看文件差异是如何实现的。

【讨论】:

    【解决方案2】:

    我想到的几种可能的解决方案之一是:

    1. 在实践中使用XPathNavigator 解析这三个文件并比较它们的内容。
    2. 对于可视化使用WPF RichTextBox,您是否可以加载完整的格式化文本和其中的格式/颜色部分,您可以使用它们来突出显示发现的差异。

    WPF RichTextBox Sample1 WPF RichTextBox Sample2

    您需要考虑到WPF TextBox 基本上易于使用,但也容易消耗大量内存,因此请注意您的应用程序的内存消耗。

    当然还有其他编辑器可以使用,例如Scintilla,但我认为这种情况下的故事会变得更加复杂。

    编辑: 可能还有另一个编程解决方案,只是使用WinMerge 并使用所需参数运行该程序(免费)。因此,它将关心显示/突出显示 2 个不同文件之间发现的差异。

    选择权在你。

    【讨论】:

      【解决方案3】:

      如果您设计类似...的类,WPF 中现有的 DataGrid 类将很好地满足这一需求。

      public class Difference
      {
          public string PropertyName { get; set; }
          public string File1Value { get; set; }
          public string File2Value { get; set; }
      }
      

      这个类将保持差异。每次发现希望用户看到的差异时,您都会创建此类的一个实例,并将每个实例添加到集合中......

      public ObservableCollection<Difference> Differences = new ObservableCollection<Difference>();
      

      并且此集合将绑定到 DataGrid 的 ItemsSource 属性。

      使用这种方法,您无需创建新控件或使用第 3 方控件。如果你想增加列标题,你可以使用 DataGridColumns 和 Templates。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-08
        • 2010-09-30
        • 1970-01-01
        • 1970-01-01
        • 2011-04-02
        • 1970-01-01
        • 2012-12-11
        • 1970-01-01
        相关资源
        最近更新 更多