Vit*_*lyB 7 .net c# data-binding wpf
考虑以下ViewModel属性:
private string _slowProperty;
public string SlowProperty
{
get { return _slowProperty; }
set
{
_slowProperty = value;
RaisePropertyChanged("SlowProperty");
}
}
Run Code Online (Sandbox Code Playgroud)
哪个绑定到文本框,如下所示:
<TextBox Text="{Binding SlowProperty}" />
Run Code Online (Sandbox Code Playgroud)
现在,这里的问题是,每当SlowProperty的值发生变化,并且经常这样做时,文本框就会尝试获取其值,这很慢.我可以使用异步绑定来缓解这种情况,但这仍然会浪费CPU周期.
相反,我想拥有的是:
<TextBlock Text="{z:DelayedSourceBinding SlowProperty}" />
Run Code Online (Sandbox Code Playgroud)
哪会在一定延迟后试图获得绑定.因此,例如,如果在SlowProperty短时间内连续更改5次,则只有最后一个文本在文本框中可见.
我发现以下项目执行类似的操作,所以我的例子我可以这样使用它:
<TextBox Text="{z:DelayBinding Path=SearchText}" />
Run Code Online (Sandbox Code Playgroud)
它的问题在于它只在延迟后更新绑定目标.但是,会对源路径进行评估,并在每次更改源时执行其getter.其中,在SlowProperty仍然会浪费CPU周期的情况下.
我试图制作自己的延迟绑定类,但卡住了.有没有其他的活页夹可以做那样的事情?
为了完整起见,这里有两个执行类似任务的项目,但是,没有解决我遇到的问题:
DeferredBinding - 与DelayBinding类似的解决方案.但是,它使用起来有点复杂.
DelayedBindingTextBox - 使用自定义文本框控件实现延迟绑定.
谢谢!
为什么不在视图模型中解决这个问题呢?如果您的属性变化很快,但获取速度很慢,则视图模型可能会公开第二个“延迟”属性。您可以使用计时器定期更新此“延迟”属性。
或者,更清晰的实现可以使用反应式扩展框架提供的Throttle函数。
| 归档时间: |
|
| 查看次数: |
2412 次 |
| 最近记录: |