【问题标题】:Cast TreeViewItem to XElement?将 TreeViewItem 转换为 XElement?
【发布时间】:2017-07-07 07:11:59
【问题描述】:

我正在尝试遍历两个集合的 XElement,以便比较它们,但我得到了错误:

System.InvalidCastException: '无法转换类型的对象 'System.Windows.Controls.TreeViewItem' 键入 'System.Xml.Linq.XElement'。'

我的代码是:

private void CompareTrees(ItemCollection xml,ItemCollection xsd )
    {               
        bool isMatch = false;
        string header = string.Empty;           

        foreach (XElement xexsd in xsd)
        {
            foreach (XElement xexml in xml)
            {                    
                    if (xexsd.Name.LocalName + " - " + xexsd.Value == xexml.Name.LocalName + " - " + xexsd.Value)
                    {
                    CompareTrees(xml, xsd);
                    isMatch = true;
                    break;
                    }    
            }
            if (isMatch == true)
            {
                continue;
            }
            else
            {
                var item = new ListBoxItem();
                lbItems.Items.Add(item);
            }
        }            
    }

【问题讨论】:

  • 在您的 2 个 foreach 循环中放置一个断点,您将看到 xsd 或 xml(或两者)中的集合是 System.Windows.Controls.TreeViewItem 的实际集合。因此,您不能将它们强制转换为 System.Xml.Linq.XElement,因为前者不会从后者继承。
  • 谢谢,但我知道 Content 不是 TreeViewItem 库的一部分
  • 你没有在这里问任何问题。
  • 更改自:CompareTrees(xml, xsd);到:比较树(xexml,xexsd);

标签: c# xml wpf linq xsd


【解决方案1】:

显然ItemCollection 包含TreeViewItems。试试这个:

foreach (TreeViewItem tvi in xml.OfType<TreeViewItem>())
{
    XElement xexsd = tvi.DataContext as XElement;
    if (xexsd != null && xexsd.Name.LocalName + " - " + xexsd.Value == xexml.Name.LocalName + " - " + xexsd.Value)
    {
        CompareTrees(xml, xsd);
        isMatch = true;
        break;
    }
}

【讨论】:

  • 您应该替换您的 foreach(XElement xexml in xml)或其他循环或两者兼而有之。根据您提供的(缺乏)信息,不可能说。就像我说的,错误消息意味着 ItemCollection 包含 TreeViewItems。
  • 你试过这个还是发生了什么?
  • 所以您确实摆脱了最初的问题的编译错误?如果您有新问题,您应该提出新问题。
  • 是的,当我用你的代码替换每个 foreach 时,它终于可以工作了!谢谢
猜你喜欢
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多