“Binding”不能设置在类型为“Binding”的“Source”属性上。

8
无法在类型为'Binding'的'Source'属性上设置'Binding'。'Binding'只能在DependencyObject的DependencyProperty上设置。
    <TreeView Height="400" Width="400">
    <TreeViewItem ItemsSource="{Binding Source={Binding Path=Data}, XPath=*, 
Converter={StaticResource stringToXmlDataProviderConverter},ConverterParameter=/root }" Header="header" />
    </TreeView>
  • What is wrong with ItemsSource="{Binding Source={Binding Path=Data}?

    Data = "<root><parm1>1</parm1><parm2>2</parm2><parm3>3</parm3></root>"
    
我尝试使用这个代码示例。 不同之处在于我想将ItemsSource绑定到数据上下文中的数据。 转换器没有问题。
<TreeViewItem ItemsSource="{Binding Path=Data}" Header="Parameters" />

向TreeView中填充一个元素(字符串),因此数据上下文是正确的。

编辑:这段代码更好用。是否有一种通用的方法来在TreeView中读取XML?我不知道XML的结构。在我看到的所有示例中,您必须声明子节点类型。

<TreeViewItem DataContext="{Binding Path=Data, Converter={StaticResource stringToXmlDataProviderConverter}}" ItemsSource="{Binding .}" Header="Parameters" />

Data看起来是什么样子?它的数据类型是什么?它有哪些属性? - Gabe
1个回答

5

无法绑定属性Source,因为它不是一个依赖属性。您确定不想这样做吗?

{Binding Path=Data, XPath=*, Converter={StaticResource stringToXmlDataProviderConverter},ConverterParameter=/root}

编辑:

调试绑定时需要检查的清单:

1)您是否正确设置了DataContext?

2)该属性对XAML代码是否可见?

3)该属性是否被访问(在其getter中设置断点)。它返回了应该返回的值吗?

4)该属性是否正确更新?以下情况之一必须适用:

  • 该属性是DependecyProperty

  • 该属性通过INotofyPropertyChanged通知其更改

  • 在调用InitializeComponent()之前,该属性的值已经最终确定


当我使用你的代码时,我没有收到任何异常,但是树中也没有任何数据。stringToXmlDataProviderConverter也没有运行。 - Amir Rezaei
1
你的数据上下文是你所期望的吗? - Ragepotato
{Binding Path=Data, Converter={StaticResource stringToXmlDataProviderConverter},ConverterParameter=/root},移除XPath=*后触发转换器,但没有数据。 - Amir Rezaei
它的getter被访问了吗?它返回了预期的结果吗? - Matěj Zábský
很奇怪,我看不到属性 getter 被调用,但转换器没有。你确定转换器没问题吗? - Matěj Zábský
当XPath=*被移除时,转换器会被调用! - Amir Rezaei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接