我有一个TextBox(TB1),它的Text值使用ElementName =“TB2”和Path =“Text”绑定到另一个TextBox(TB2)。
然后我有第三个TextBox(TB3),我在TB1背后的代码中设置了SetBinding,我希望它能让我编辑TB3以及TB1和amp; TB2也会反映由于绑定(理论上)对所有人而言的变化。
我可以编辑TB1并更新TB2(反之亦然),但TB3从不显示/更新值。
我只能认为这是因为TB1绑定使用的是ElementName而不是DependencyProperty?
是否可以复制使用ElementName绑定的元素的绑定?
<TextBox Name="TB1">
<Binding ElementName="TB2" Path="Text" UpdateSourceTrigger="PropertyChanged"/>
</TextBox>
<TextBox Name="TB2">
<Binding Path="Name" UpdateSourceTrigger="PropertyChanged"/>
</TextBox>
然后在代码背后我有:
BindingExpression bindExpression = TB1.GetBindingExpression(TextBox.TextProperty);
if (bindExpression != null && bindExpression.ParentBinding != null && bindExpression.ParentBinding.Path != null)
{
TB3.DataContext = TB1.DataContext;
TB3.SetBinding(TextBox.TextProperty, bindExpression.ParentBinding);
}
通常刚刚在测试中发现,如果在同一个xaml中,这确实有效。但是,我在自己的窗口中有TB3,如下所示,文本框永远不会正确绑定..我错过了什么?
if (bindExpression != null && bindExpression.ParentBinding != null && bindExpression.ParentBinding.Path != null)
{
PopupWindow wnd = new PopupWindow();
wnd.DataContext = TB1.DataContext;
wnd.TB3.SetBinding(TextBox.TextProperty, bindExpression.ParentBinding);
wnd.Show();
}
我不是百分之百确定为什么但是这样做了,它似乎与SetBinding做了相同的绑定但是将源设置为DataItem,但它给了我所需的结果...谢谢Klaus78 ..
if (bindExpression != null && bindExpression.ParentBinding != null && bindExpression.ParentBinding.Path != null)
{
PopupWindow wnd = new PopupWindow();
Binding b = new Binding();
b.Source = bindExpression.DataItem; //TB1;
b.Path = new PropertyPath("Text");
b.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
wnd.TB3.SetBinding(TextBox.TextProperty, b);
wnd.Show();
}
答案 0 :(得分:1)
在新窗口中,您将TB3.Text
绑定到TB2.Text
在TB3.Text的实践中,您有一个绑定对象Element=TB2
和Path=Text
。问题是在新窗口的可视化树中没有名称为TB2
的元素,因此如果查看Visual Studio输出调试,则会出现绑定错误。
另请注意TB1.DataContext
为空。另一方面,这个命令没用,因为绑定类已经设置了Element
属性作为绑定源。
我认为你不能简单地将绑定从TB1复制到TB3。无论如何,你需要为TB3创建一个新的Binding对象,如
Window2 wnd = new Window2();
Binding b = new Binding();
b.Source = TB1;
b.Path = new PropertyPath("Text");
wnd.TB3.SetBinding(TextBox.TextProperty, b);
wnd.Show();
这样的代码可以对你有所帮助吗?