数据绑定文本框

时间:2011-02-21 09:41:11

标签: data-binding mvvm windows-phone-7

嗯,我是MVVM的新手,所以欢迎任何提示和建议:)

我想跟踪用户名和密码,用户可以在“设置”视图中进行设置。 在SettingsViewModel中,我有2个属性用于绑定到视图上文本框的这两个字段。 我在应用栏上添加了一个“保存”按钮,通过RelayCommand,当用户点击它时,它会在ViewModel上执行一个方法。

现在出了什么问题:

  • 当用户键入文本框但未退出时,但直接按下保存时,该值尚未进行数据绑定。那你怎么解决这个问题呢?是使用coding4fun库中的coding4fun:TextBoxBinding.UpdateSourceOnChange =“True”功能的唯一方法吗?

  • 当用户在文本框中输入数据并且是数据绑定时,离开设置页面并返回到它仍将保留此数据。只要用户没有按下保存按钮,我该如何清除它?有点奇怪,你还没有保存页面上的数据...但是因为我使用MVVMLight,页面在ViewModelLocator中静态创建,并且只要程序正在运行就保持“活动”。

就像我说的那样,欢迎任何提示,提示和建议:)

2 个答案:

答案 0 :(得分:4)

Re 1:这是known issue,如果最后一个具有焦点的控件是文本框,并且您单击了一个应用栏按钮,则其最新值不能正确显示数据绑定。在我的appbar单击事件处理程序中,如果最后一个具有焦点的控件是文本框或密码框,我会调用以下方法强制数据绑定。

private static void UpdateBoundText()
{
    var focusObj = FocusManager.GetFocusedElement();
    if (focusObj == null) return;
    var binding = focusObj is TextBox ? ((TextBox)focusObj).GetBindingExpression(TextBox.TextProperty)
                : focusObj is PasswordBox ? ((PasswordBox)focusObj).GetBindingExpression(PasswordBox.PasswordProperty) 
                : null;
    if (binding != null)
    {
        binding.UpdateSource();
    }
}

答案 1 :(得分:3)

1 - 将TextBox绑定的UpdateSourceTrigger值设置为PropertyChanged

<TextBox Text="{Binding MyProperty, UpdateSourceTrigger=PropertyChanged}" />

2 - 我没有使用过MVVM Light Toolkit,但可能它有一个激活视图模型的概念,你可以在视图模型中将属性重置为默认值。如果没有,那么看看Caliburn.Micro哪个支持这个概念。