我有一个 TextBox (TB1),它的 Text 值使用 ElementName="TB2" 和 Path="Text" 绑定到另一个 TextBox (TB2)。
然后我有第三个文本框(TB3),我在 TB1 后面的代码中设置绑定,我希望这将允许我编辑 TB3,并且 TB1 和 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();
}
我不是 100% 确定为什么,但这确实成功了,它似乎做了与 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();
}