我有一个带有需要服务的构造函数的视图模型。我正在使用 GalaSoft 的 MvvmLight,它使用服务定位器将视图连接到视图模型。
SimpleIOC 可以很好地处理向 viewmodels 构造函数提供服务,但我需要用来自数据源的数据填充我的 viewmodel。我的 Viewmodel 看起来像这样:-
public class MainPageViewModel : ViewModelBase
{
private readonly GroupService _groupService;
private readonly GroupFactory _groupFactory;
private readonly ObservableCollection<GroupVM> _groupVms = new ObservableCollection<GroupVM>();
public MainPageViewModel(Domain.Services.GroupService groupService, VMFactories.GroupFactory groupFactory)
{
_groupService = groupService;
_groupFactory = groupFactory;
}
public async Task Init()
{
var groups = await _groupService.LoadGroups();
foreach (var group in groups)
{
GroupVms.Add(_groupFactory.Create(group));
}
}
public ObservableCollection<GroupVM> GroupVms { get { return _groupVms; } }
}
不知何故,init 方法需要被称为等待,但我不知道如何最好地做到这一点?我可以想到三个选项:-
- 我只是在构造函数上调用 Init,但不等待它(我知道那是非常糟糕的做法)
- 我在 ViewModelLocator 对象上调用 Init,但由于我无法返回任务,我再次无法等待 init
- 在视图加载时,我将 DataContext 转换为某种 IAsyncViewmodel 并等待 init 方法。
我在以前的 Windows 8 商店项目中使用过选项 3,但感觉不对。任何建议将不胜感激!
谢谢
罗斯