积极答复者
Textbox OneWay模式绑定问题

问题
-
不知道为何会绑定失败。
<TextBox Grid.Row="0" Grid.Column="0" Name="txt01"></TextBox>
<TextBox Grid.Row="1" Grid.Column="1" Name="txt02" Text="{Binding ElementName=txt01,Path=Text,Mode=OneWay}"></TextBox>
运行后,在 txt01中输入文本,在OneWay模式下,txt02正常显示与txt01中一样的文本。
----------------------------------------------------------
问题是,txt02没有disable,可以人为输入值。我一旦手工在txt02里面随便写几个字,然后再在txt01中修改,txt02则不会再变化了,不知道为何会这样,请教了。
答案
-
txt02 可以被修改,使用 OneWay 不合适.
对于可以被修改的 OneWay Binding, 一旦 Target 被非源改变,则它的 Binding 将被销毁.
你的示例中,txt02 未被手动改变前:
txt02.GetBindingExpression(TextBox.TextProperty) 是有效的.
一旦用户对 txt02 输入:
txt02.GetBindingExpression(TextBox.TextProperty) 将会是 null.
使 txt02 IsEnabled 为 false 或 IsReadOnly 为 True 以保持其 Binding, 或者 在适当的时机重建 Binding.
Hello, everyone- 已标记为答案 菜根香 2010年3月31日 7:19
全部回复
-
txt02 可以被修改,使用 OneWay 不合适.
对于可以被修改的 OneWay Binding, 一旦 Target 被非源改变,则它的 Binding 将被销毁.
你的示例中,txt02 未被手动改变前:
txt02.GetBindingExpression(TextBox.TextProperty) 是有效的.
一旦用户对 txt02 输入:
txt02.GetBindingExpression(TextBox.TextProperty) 将会是 null.
使 txt02 IsEnabled 为 false 或 IsReadOnly 为 True 以保持其 Binding, 或者 在适当的时机重建 Binding.
Hello, everyone- 已标记为答案 菜根香 2010年3月31日 7:19
-
谢谢您的回答。我明白了。那再问一个问题。
<TextBox Grid.Row="0" Grid.Column="0" Name="txt01"></TextBox>
<TextBox Grid.Row="1" Grid.Column="1" Name="txt02"></TextBox>我在程序里面实现OneWay绑定
void txt01_TextChanged(object sender, TextChangedEventArgs e)
{
Binding b=new Binding("");
b.Mode = BindingMode.OneWay;
b.Source = txt01.Text;
txt02.SetBinding(TextBox.TextProperty, b);
}这样写,调试是没有问题的。正常的实现了OneWay的绑定,txt02输入以后,也不影响
我想问的就是,如果这段代码贴在了构造函数里面,为何就不起作用了?难道只是绑定了一次?而不是设置了属性么?
以下代码不起作用,我不知道为何
//窗体的名字叫做WdBinding
public Bingding b=new Binding("");
public WdBinding()
{
InitializeComponent();
b.Mode = BindingMode.OneWay;
b.Source = txt01.Text;
txt02.SetBinding(TextBox.TextProperty, b);
//这段代码没有起到OneWay绑定的作用 ,不知道为何?难道非要写在txt01的TextChanged事件中么?
}