我刚刚开始使用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“
我真的不知道我在这里做错了什么,有人可以帮忙吗?
提前致谢。
答案 0 :(得分:2)
我相信您会发现this question包含您问题的答案。
基本上,您的TestComplexObject
不是免费的线程和线程安全的(例如从System.Windows.Freezable派生)。两种类型(MainWindow
和TestComplexObject
)的类型初始值设定项(或可能)在不同的线程上同时运行 - 这会在{{的类型初始值设定项时导致交叉线程异常(或更糟) 1}}导致调用MainWindow
的类型初始值设定项。框架检测到这种可能性并引发异常。
答案 1 :(得分:0)
问题在于这一行:
set { SetValue(ExeLocationProperty, value); }
您只能在SetValue(SomethingProperty, value);
的设置器中拨打Something
。