过去我已经很容易地使用Silverlight,通过声明BusyIndicator作为我的根元素,并将IsBusy属性绑定到RIA Services生成的域上下文的IsLoading属性:
<toolkit:BusyIndicator IsBusy="{Binding Context.IsLoading}" >
由于Entity Framework生成的ObjectContext上似乎没有IsLoading
属性,如何在WPF中绑定IsBusy属性?
谢谢
答案 0 :(得分:0)
我想出了什么:
WPF扩展工具包中的繁忙指示器:
<extoolkit:BusyIndicator IsBusy="{Binding IsBusy}" BusyContent="Loading data..." >
在我的基类视图模型中,我添加了以下方法:
protected void ExecuteBackgroundProcess(Action action)
{
IsBusy = true;
Task task = Task.Factory.StartNew(() => action()).ContinueWith((s) => this.IsBusy = false);
}
当我想从服务器加载集合时,我可以从派生的视图模型调用:
this.ExecuteBackgroundProcess(() =>
{
var collection = _securityRepo.TakeOfType<Security>(10).ToObservableCollection();
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
Securities = collection;
RaisePropertyChanged("Securities");
});
});
还有一个更强大的&amp; CodeProject上的完整解决方案: http://www.codeproject.com/KB/WPF/ThreadingComponent.aspx?msg=3319891