【问题标题】:XML Node List as dependency property?XML节点列表作为依赖属性?
【发布时间】:2012-08-16 21:30:49
【问题描述】:

我有一个 xml 文件并创建了控件来显示其中的数据。大多数显示的节点没有子节点,但有少数节点有。对于那些我需要在 ItemsControl 中列出一些属性值的人。我能够创建一个 List 作为依赖属性以对其进行测试,并且字符串按预期显示。但是,现在我正在尝试绑定到 xml,但它似乎不起作用。

我已将依赖属性更改为 List 并将此依赖属性与值 SubOptions="{Binding Path=ChildNodes}" 绑定。在控件内部,ItemsControl 的 ItemsSource 也绑定到它自己的依赖属性。

为什么这不起作用?当我在绑定上放置一个测试转换器时,它给我的值是“XmlChildNodes”,我无法直接创建它,但每次我尝试将其隐式转换为 List 时,它都可以工作......

【问题讨论】:

  • 好的我测试了在两者之间放置一个转换器并将 XmlNodeList 转换为 List 以便类型与依赖属性类型完全匹配。我验证了(在调试器中)该列表已成功创建,但在 ItemsControl 中我仍然一无所获...
  • 你是如何设置 DataContext 的?
  • 好的,我相信我找到了。对于遇到此问题的其他任何人,发生了以下情况:使用 List 时,我得到的列表对于表单上的每个控件实例都是相同的(所以我不能有多个不同的控件实例列表)。我在这里搜索,发现依赖属性由于某种原因默认情况下对每个实例使用相同的列表(愚蠢),但解决方案是放置代码: SetValue(SubOptionsProperty, new List());
  • 在构造函数中,使其设置为新列表。这对字符串很有用,但是绑定或 xml 列表显然不能那样工作,似乎它是从绑定中设置值,然后构造函数中的这段代码将其转储并设置为一个新列表。有趣的是,它不使用相同的列表,我仍然可以在每个控件上使用不同的列表。在注释掉那条线之后,它现在似乎正在工作,但如果有人有更多信息,我很想知道......
  • 对不起,多个cmets,它不会让我自己回答自己......

标签: wpf xml data-binding wpf-controls


【解决方案1】:

好的,我相信我找到了。对于遇到此问题的其他人,这是发生的事情:

当使用 List 时,我发现表单上每个控件实例的列表都相同(因此我不能有多个具有不同列表的控件实例)。我在这里搜索,发现依赖属性由于某种原因默认为每个实例使用相同的列表(愚蠢),但解决方案是放代码:

SetValue(SubOptionsProperty, new List<string>());

在构造函数中,使其设置为新列表。这对字符串很有用,但是绑定或 xml 列表显然不能那样工作,似乎它是从绑定中设置值,然后构造函数中的这段代码将其转储并设置为一个新列表。有趣的是,它不使用相同的列表,我仍然可以在每个控件上使用不同的列表。

在注释掉那行之后,它现在似乎可以工作了,但是如果有人有更多信息,我很想知道它为什么会工作......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 2016-09-18
    • 1970-01-01
    相关资源
    最近更新 更多