我有一个包含字符串的文本框,只有当用户按下按钮时才必须绑定该字符串。在XAML中:
<Button Command="{Binding Path=PingCommand}" Click="Button_Click">Go</Button>
<TextBox x:Name="txtUrl" Text="{Binding Path=Url,UpdateSourceTrigger=Explicit, Mode=OneWay}" />
在代码隐藏中:
private void Button_Click(object sender, RoutedEventArgs e)
{
BindingExpression be = this.txtUrl.GetBindingExpression(TextBox.TextProperty);
be.UpdateTarget();
}
“be”始终为NULL。为什么呢?
更新
好的,这是经过大量尝试后的一些更新。
如果,我将模式OneWay设置为显式更新。我在GetBindingExpression的“be”对象中有一个NullReferenceException。
如果我使用显式更新将模式设置为空(默认为TwoWay)。我有绑定获取值(string.empty),它每次都会删除文本框中的所有内容。
如果我将Mode设置为OneWay,使用PropertyChanged当我按下文本框中的键时,绑定的属性没有任何内容,当我单击按钮时,我在“be”对象中有一个NULLReferenceException。
如果我将模式设置为空(默认为TwoWay),使用PropertyChanged我每次按(GOOD)时都会提高属性但我不希望每次用户按下某个键时都会更改属性...但是只有用户按下按钮。
答案 0 :(得分:7)
好吧,经过多思考后,我注意到了:
BindingExpression be = this.txtUrl.GetBindingExpression(TextBox.TextProperty);
be.UpdateTarget();
有一些不合逻辑的东西,因为我不想更新目标而是来源。我只是将be.Updatetarget()改为be.UpdateSource();一切都适用于这个XAML:
<TextBox x:Name="txtUrl" Text="{Binding Path=Url, UpdateSourceTrigger=Explicit}">...
感谢所有帮助我解决这个问题的人。我给每个人加了+1!感谢
答案 1 :(得分:1)
它应该工作,可能是你在事件处理程序中提供的行之前调用删除绑定的函数?将值分配给文本框的文本属性将删除绑定
答案 2 :(得分:1)
您是否在没有UpdateSourceTrigger的情况下尝试过数据绑定?如果绑定失败,我希望null是GetBindingExpression的结果。
其中一个原因可能是Url
未实现为DependencyProperty。