如何调试数据绑定

时间:2012-02-20 19:18:12

标签: c# wpf xaml data-binding

我是数据绑定的新手,我很难为我的WPF应用程序设置它:

我有一个类Test,它实现了INotifyPropertyChanged和一个属性Text。

当我在代码隐藏中执行此操作时:

Binding b = new Binding("Text");
b.Source = Test;
label1.SetBinding(ContentProperty, b);

一切都很好。

当我在XAML中做同样的事情时:

Content="{Binding Source=Window.Test, Path=Text}"

标签内容不会更新。

我想避免在代码隐藏中执行此操作,我做错了什么?

3 个答案:

答案 0 :(得分:1)

最简单的解决方案是在XAML中为窗口命名(例如root)并使用ElementName来定义绑定源:

Content="{Binding ElementName=root, Path=Test.Text}"

答案 1 :(得分:0)

为简单起见,将窗口DataContext设置为Test实例:

public partial class MainWindow : Window
{   
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new Test
            {
                Text = "Hello, World!"
            };
    }
}

然后在XAML中声明数据绑定:

Content="{Binding Path=Text}"

答案 2 :(得分:0)

  

我做错了什么?

你正在做出毫无根据的假设,关于应该的工作方式,你没有太多线索。你在这里处理两种根本不同的语言,只是因为你希望 WPF将Window.Test解释为对你想到的某个特定窗口的引用并不是这样。

XAML基本上是基于字符串的,因为大多数字符串被转换为原始类型,如整数和双精度,例如设置控件的高度时,将string传递给类型为double的属性。 XAML解析器通过反射知道该属性的类型为double,并尝试转换string(如果没有指定其他属性,则使用默认的value converter)。现在,如果属性类型为object,您认为会发生什么?什么是解析器?好吧,它不会做任何事情,因为string已经已经 object

当你写Window.Test时,猜猜Binding.Source有什么类型以及绑定的源对象是什么......