按下按钮时绑定(显式绑定)总是BindingExpression为null?

时间:2009-08-12 13:48:08

标签: c# .net wpf binding

我有一个包含字符串的文本框,只有当用户按下按钮时才必须绑定该字符串。在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)时都会提高属性但我不希望每次用户按下某个键时都会更改属性...但是只有用户按下按钮。

3 个答案:

答案 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。