WPF中非常基本的依赖属性问题 - 尝试绑定到复杂对象

时间:2010-10-03 21:37:03

标签: wpf dependency-properties

我刚刚开始使用WPF。 我在xmal中声明了TextBox,如下所示:

<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Path=TestComplex.Something, Mode=TwoWay}"/>

在我的代码后面,我已经注册了我试图绑定的属性,如下所示:

public TestComplexObject TestComplex
    {
        get { return (TestComplexObject)GetValue(TestComplexProperty); }
        set { SetValue(TestComplexProperty, value); }
    }

    public static readonly DependencyProperty TestComplexProperty=
        DependencyProperty.Register("TestComplex", typeof(TestComplexObject ), typeof(MainWindow), new UIPropertyMetadata(new TestComplexObject ()));

TestComplexObject类:

public class TestComplexObject : DependencyObject 
{
    public string Something
    {
        get { return (string)GetValue(SomethingProperty ); }
        set { SetValue(ExeLocationProperty, value); }
    }

    public static readonly DependencyProperty SomethingProperty =
        DependencyProperty.Register("Something", typeof(string), typeof(TestComplexObject), new UIPropertyMetadata("Test Text"));

}

正如你所看到的,我正在尝试将TextBox绑定到TestComplex.Something,但是当我运行这个时,我得到的只是一个xmal解析异常,

  

“'构造函数的调用   输入'EmuRunner.MainWindow'即可   匹配指定的绑定   约束引发了例外。线   数字'6'和行位置'9“

我真的不知道我在这里做错了什么,有人可以帮忙吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

我相信您会发现this question包含您问题的答案。

基本上,您的TestComplexObject不是免费的线程和线程安全的(例如从System.Windows.Freezable派生)。两种类型(MainWindowTestComplexObject)的类型初始值设定项(或可能)在不同的线程上同时运行 - 这会在{{的类型初始值设定项时导致交叉线程异常(或更糟) 1}}导致调用MainWindow的类型初始值设定项。框架检测到这种可能性并引发异常。

答案 1 :(得分:0)

问题在于这一行:

set { SetValue(ExeLocationProperty, value); }

您只能在SetValue(SomethingProperty, value);的设置器中拨打Something