我有一个在Windows Phone 8上运行的MVVM Cross应用程序,我最近将其移植到使用可移植类库.
视图模型位于可移植类库中,其中一个公开了一个属性,该属性通过数据绑定从Silverlight for WP工具包启用和禁用PerformanceProgressBar.
当用户按下按钮时,RelayCommand启动后台进程,该进程将属性设置为true,这将启用进度条并执行后台处理.
在将其移植到PCL之前,我能够从UI线程调用更改以确保启用了进度条,但是在PCL中无法使用Dispatcher对象.我该如何解决这个问题?
谢谢
担
如果您无权访问Dispatcher,则只需将BeginInvoke方法的委托传递给您的类:
public class Yourviewmodel { public Yourviewmodel(Action<Action> beginInvoke) { this.BeginInvoke = beginInvoke; } protected Action<Action> BeginInvoke { get; private set; } private void SomeMethod() { this.BeginInvoke(() => DoSomething()); } }
然后实例化(来自可以访问调度程序的类):
var dispatcherDelegate = action => Dispatcher.BeginInvoke(action); var viewmodel = new Yourviewmodel(dispatcherDelegate);
或者您也可以在调度程序周围创建一个包装器.
首先,在可移植类库中定义IDispatcher接口:
public interface IDispatcher { void BeginInvoke(Action action); }
然后,在有权访问调度程序的项目中,实现接口:
public class DispatcherWrapper : IDispatcher { public DispatcherWrapper(Dispatcher dispatcher) { this.Dispatcher = dispatcher; } protected Dispatcher Dispatcher { get; private set; } public void BeginInvoke(Action action) { this.Dispatcher.BeginInvoke(action); } }
然后,您可以将此对象作为IDispatcher实例传递给可移植类库.