请考虑以下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 – 使用自定义文本框控件实现延迟绑定.
谢谢!
解决方法
原文地址:https://www.jb51.cc/csharp/99415.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。