mvvm - TextBox.Text 单向绑定(bind)不响应 ViewModel 更新背后的代码

标签 mvvm windows-phone-8 windows-phone mvvm-light

我目前正在为我的 View 实现一个搜索(更准确地说是“过滤器”)表单,它使用 ApplicationBarIconButtons 来驱动用户与表单的交互:一个搜索按钮用于转换到显示表单的 VisualState,一个用于清除当前过滤器字符串值.接受过滤器的文本框绑定(bind)到 ViewModel 上的一个属性:

XAML

<toolkit:PhoneTextBox x:Name="txtSearch" Text="{Binding VisitsFilter, Mode=OneWay}" />

查看型号
private string _visitsFilter;
public string VisitsFilter
{
    get
    {
        return _visitsFilter;
    }
    set
    {
        _visitsFilter = value;
        RaisePropertyChanged("VisitsFilter");
        RebuildVisits();
    }
}

问题是 ApplicationBarIconButtons 并没有任何能力使用命令或类似方法绑定(bind)到我的 ViewModel 上的点,因此我在其 Click 事件的处理程序后面的代码中处理它们与它的交互。看起来应该没什么大不了的......从页面的数据上下文中获取 ViewModel 并设置绑定(bind)属性的值:

后面的代码
private VisitsViewModel ViewModel
{
    get
    {
        return this.DataContext as VisitsViewModel;
    }
}

private void abbClear_Click(object sender, EventArgs e)
{
    this.Focus();
    ViewModel.VisitsFilter = string.Empty;
}

如果您通过 setter 遵循上面的代码,您会看到我设置了私有(private)字符串成员的值,然后引发属性已更改的事件。实际上,我的 View 中有一个订阅此事件的代码,该代码正在执行有关使“清除”按钮可见或不可见的其他逻辑,但关键是它正在成功监听该事件。但是,上面标记中的 OneWay 绑定(bind)不会更新我的 PhoneTextBox 上的 Text 属性的值。

这里的断线在哪里?

最佳答案

  • 您的 setter 中的方法可能花费的时间太长,或者做一些可能会弄乱 UI 线程的事情。这意味着当它发布以响应您的 PropertyChanged 时,它错过了更新的机会...

  • 尝试删除 RebuildVisits();从二传手。如果可行,并且这个假设是正确的,那么在不同的线程上执行 RebuildVisits。
    public string VisitsFilter
    {
      get { return _visitsFilter; }
      set { 
             _visitsFilter = value;
             RaisePropertyChanged("VisitsFilter");
    
             Tasks.StartNew (() => { RebuildVisits();});
           }
        ....
    

    }

    2.如果它真的是一种单向绑定(bind),会干扰您的更新。为什么不设置文本框

    IsReadOnly = "真"
    并将绑定(bind)设置为 TwoWay

    关于mvvm - TextBox.Text 单向绑定(bind)不响应 ViewModel 更新背后的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16843656/

    相关文章:

    java - TreeModel 中的内部类的属性不可读

    c# - 中继命令上的 CanExecute 不起作用

    windows-phone-8 - 如何在Windows编程8中获取SIM序列号?

    c# - 如何将图像路径保存到动态磁贴的 WP8 本地文件夹

    javascript - meta viewport 标签在 window phone IE 浏览器中不起作用

    php - 使用 Json、php 的 Windows Phone 应用程序中未显示输出

    wpf - ListView 的 ItemsSource 绑定(bind)未将更改推送到源

    c# - 我需要多少 View 、 View 模型和模型?

    javascript - window.open 在 Windows Phone 8 上返回 null

    xaml - ObservationCollection 使用 MVVM 架构在 PCL 内部的 ViewModel 中实现 ISupportIncrementalLoading,以支持 WinRT 和 WP8/WinPRT