Osc*_*ero 9 c# wpf binding asynchronous mvvm
什么是在WPF和MVVM上实现异步操作的最简单方法,让我们说如果用户在某个字段上输入时我想要启动命令然后返回,而线程将执行一些搜索操作然后返回更新属性,以便通知可以更新绑定.
谢谢!
Rob Eisenberg在他的MIX10演讲期间展示了在MVVM中运行异步操作的非常干净的实现.他在他的博客上发布了源代码.
基本思想是将命令实现为返回IEnumerable并使用yield关键字返回结果.这是他演讲中的一段代码,它将搜索作为后台任务:
public IEnumerable<IResult> ExecuteSearch()
{
var search = new SearchGames
{
SearchText = SearchText
}.AsResult();
yield return Show.Busy();
yield return search;
var resultCount = search.Response.Count();
if (resultCount == 0)
SearchResults = _noResults.WithTitle(SearchText);
else if (resultCount == 1 && search.Response.First().Title == SearchText)
{
var getGame = new GetGame
{
Id = search.Response.First().Id
}.AsResult();
yield return getGame;
yield return Show.Screen<ExploreGameViewModel>()
.Configured(x => x.WithGame(getGame.Response));
}
else SearchResults = _results.With(search.Response);
yield return Show.NotBusy();
}
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
一个BackgroundWorker实例在虚拟机上调用您的命令怎么样?
更新:取消上面的建议.. Jason Dolinger 有一个关于 MVVM 的在线视频.. 我建议你看一下。这是一种更干净的方式,其中视图很薄/不包含任何线程代码。
总结一下:
_dispatcher.BeginInvoke( () => _results.AddRange( entries) )
以便正确更新 UI。 归档时间: |
|
查看次数: |
5335 次 |
最近记录: |