我正在使用 AvaloniaUI 框架来构建应用程序。
我有一个实现的视图模型,IActivatableViewModel
我正在调用WhenActivated
视图模型构造函数。我定义HandleActivation
了一个方法,当视图模型被激活时调用,HandleDeactivation
当视图模型被停用时。一切都被正确调用,那里没有问题。
它看起来像这样:
public abstract class MyViewModel: ViewModelBase, IActivatableViewModel
{
public ViewModelActivator Activator { get; }
protected MyViewModel() : base()
{
Activator = new ViewModelActivator();
this.WhenActivated(disposables =>
{
this.HandleActivation();
Disposable
.Create(this.HandleDeactivation)
.DisposeWith(disposables);
});
}
private void HandleActivation()
{ }
private void HandleDeactivation()
{ }
}
我还有一个数据服务,可以从数据库中检索一些数据。我要调用的方法返回一个Task<T>
. 它看起来像这样:
public interface IDataService
{
Task<IList<UserDto>> GetActiveUsers();
}
我想做的是GetActiveUsers
从 HandleActivation 方法调用。我需要获取用户列表,然后在检索它们后对它们进行一些后期处理。
如果我在异步方法中这样做,我会做这样的事情
private async Task HandleActivation()
{
var users = await _dataService.GetActiveUsers();
foreach(var user in users)
{
//do stuff
}
}
由于HandleActivation
不是异步方法,我对如何去做这件事有点困惑。
有没有一种方法可以使我HandleActivation
异步,是否有一种我缺少的“反应性”方法。我对 AvaloniaUI 和 ReactiveUI 以及响应式编程本身非常陌生,所以我确信有一种“正确”的方法可以做到这一点,但我很难弄清楚。