无法在“绑定”类型的“源”属性上设置“绑定”

时间:2011-02-07 19:44:35

标签: c# wpf xaml binding

无法在“绑定”类型的“源”属性上设置“绑定”。 '绑定'只能在DependencyObject的DependencyProperty上设置。

    <TreeView Height="400" Width="400">
    <TreeViewItem ItemsSource="{Binding Source={Binding Path=Data}, XPath=*, 
Converter={StaticResource stringToXmlDataProviderConverter},ConverterParameter=/root }" Header="header" />
    </TreeView>
  • ItemsSource =“{Binding Source = {Binding Path = Data}?

    有什么问题?
    Data = "<root><parm1>1</parm1><parm2>2</parm2><parm3>3</parm3></root>"
    

我尝试使用this代码示例。 不同之处在于我想将ItemsSource绑定到datacontext中的数据。 转换器没有任何问题。

修改

<TreeViewItem ItemsSource="{Binding Path=Data}" Header="Parameters" />

使用一个元素(字符串)填充TreeView。所以datacontext是正确的。

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

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

1 个答案:

答案 0 :(得分:4)

绑定的属性Source无法绑定,因为它不是依赖属性。你确定不想这样做吗? :

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

编辑:

调试绑定时要检查的核对表:

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

2)XAML代码是否可以看到该属性?

3)是否访问了属性(将断点放入其getter中)。它会返回它应该的值吗?

4)属性是否正确更新?必须遵循以下任一方案:

  • 该属性为DependecyProperty

  • 该物业通知 通过INotofyPropertyChanged进行更改

  • 我们最终确定了物业价值 在调用InitializeComponent()

  • 之前