单击ApplicationBar中的按钮时,TextBox的双向数据绑定不会更新

fun*_*bro 4 mvvm windows-phone-7

我有一个TextBox在我的应用程序中,并ApplicationBarIconButtonApplicationBar其中充当"提交"的内容TextBox.

TextBox使用虚拟键盘进行编辑时,ApplicationBarIconButtonSIP下方仍然可以看到,因此您可以直接提交而无需关闭键盘:好!

但是,单击该按钮时,TextBox绑定到的视图模型不会更新.

我发现别人同样的问题在这里,和他们使用的手动更新的视图模型的非常讨厌的解决办法TextBoxTextChanged事件.

删除使用数据绑定视图模型的所有优雅!

这是WP7中的错误吗?

或者有一个更好的方法,我还没有找到?

cal*_*lum 13

问题是silverlight绑定不支持UpdateSourceTrigger的PropertyChanged值.这意味着默认情况下,当TextBox失去焦点时,TextBox将更新绑定到Text的属性,唯一的另一种可能性是在代码中显式更新它,如链接中的示例所示.

这里只有两个选项:单击按钮时更新绑定,或单击按钮时从TextBox中移除焦点.

我通常更新TextChanged事件的绑定.我使用扩展方法来执行此操作:

public static void UpdateBinding(this TextBox textBox)
{
    BindingExpression bindingExpression = 
            textBox.GetBindingExpression(TextBox.TextProperty);
    if (bindingExpression != null)
    {
            bindingExpression.UpdateSource();
    }
}
Run Code Online (Sandbox Code Playgroud)

允许我在后面的代码中调用它:

textBox.UpdateBinding();
Run Code Online (Sandbox Code Playgroud)

您也可以使用自定义行为.