加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 来自源的延迟绑定

发布时间:2020-12-15 07:45:28 所属栏目:百科 来源:网络整理
导读:请考虑以下ViewModel属性: private string _slowProperty;public string SlowProperty{ get { return _slowProperty; } set { _slowProperty = value; RaisePropertyChanged("SlowProperty"); }} 哪个绑定到文本框,如下所示: TextBox Text="{Binding SlowP
请考虑以下ViewModel属性:
private string _slowProperty;
public string SlowProperty
{
    get { return _slowProperty; }
    set
    {
        _slowProperty = value;
        RaisePropertyChanged("SlowProperty");
    }
}

哪个绑定到文本框,如下所示:

<TextBox Text="{Binding SlowProperty}" />

现在,这里的问题是,每当SlowProperty的值发生变化,并且经常这样做时,文本框将会尝试获取其值,这很慢.我可以使用异步绑定来缓解这种情况,但这仍然会浪费CPU周期.

相反,我想拥有的是:

<TextBlock Text="{z:DelayedSourceBinding SlowProperty}" />

哪会在一定延迟后试图获得绑定.因此,例如,如果SlowProperty连续5次更改,在短时间内,则只有最后一个文本在文本框中可见.

我发现following project执行类似的东西,所以我的例子我可以像这样使用它:

<TextBox Text="{z:DelayBinding Path=SearchText}" />

它的问题在于它只在延迟后更新绑定目标.但是,会对源路径进行评估,并在每次更改源时执行其getter.其中,在SlowProperty的情况下仍会浪费CPU周期.

我试图制作我自己的延迟绑定类,但是got stuck.还有其他任何类似的活页夹吗?

为了完整起见,这里有两个执行类似任务的项目,但是,没有解决我遇到的问题:

DeferredBinding – 与DelayBinding类似的解决方案.但是,它使用起来有点复杂.

DelayedBindingTextBox – 使用自定义文本框控件实现延迟绑定.

谢谢!

解决方法

为什么不在视图模型中解决这个问题?如果您的属性变化很快,但速度很慢,那么您的视图模型可能会暴露出第二个“延迟”属性.您可以使用计时器定期更新此“延迟”属性.

或者,更干净的实现可以使用响应扩展框架提供的Throttle功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读