使用caliburn micro和autoface填充初始视图模型数据

本文关键字:视图 模型 数据 填充 caliburn micro autoface 使用 | 更新日期: 2023-09-27 18:01:42

我正在学习Caliburn。同时使用Micro和autoface。我正在编写一个简单的应用程序,这样我就可以自学如何正确使用这两种技术。

每次我认为我得到的地方,我总是绊倒在如何初始化我的数据为我的根视图模型。这个视图模型需要注入一个"类别"视图模型列表。这个"category"视图模型列表将在应用初始化时加载。

那么,我如何注册我的根"Navigator"视图模型与autofac,并通知autofac,视图模型需要有数据注入时,一个新的实例创建?

如果没有calibre和autoface,我只需要创建我自己的启动方法,加载我的数据,并将其注入我的视图模型。使用caliburn,我试图覆盖引导程序中的configure方法,因为这是我应该用ioc容器注册我的类的地方。

我的根视图:

public class NavigatorViewModel : Conductor<IScreen>.Collection.OneActive
{
    public NavigatorViewModel(IEnumerable<CategoryViewModel> categories)
    {
        AddCategories(categories);
    }
    public void AddCategories(IEnumerable<CategoryViewModel> categories)
    {
        foreach (var category in categories)
        {
            if (Items.Contains(category))
                continue;
            Items.Add(category);
        }
        SetActiveItem();
    }
    private void SetActiveItem()
    {
        if (Items.Count < 1)
            return;
        ActiveItem = Items[0];
    }
}

这是我如何注册viewModels与Autofac:

protected override void Configure()
{
    var builder = new ContainerBuilder();
    builder.RegisterType<CategoryViewModel>().AsSelf();
    builder.RegisterType<NavigatorViewModel>().AsSelf();
    ...
    container = builder.Build();
}

当注册我的NavigatorViewModel我如何告诉autoface,它需要有CategoryViewModels注入的列表,以及?

我猜我会在caliburn引导程序中加载我的数据,但我只是不确定如何在这一点上把它全部连接起来。

使用caliburn micro和autoface填充初始视图模型数据

这看起来像是一个关于AutoFac而不是MVVM或Caliburn的问题。微,无论如何,据我所知AutoFac支持自动布线序列(IEnumberable)自动所以它应该填补列表全部由它自己当它试图解决你的导航器,但如果你需要为数据加载提供自定义的工作,你可以这样做:

builder.RegisterType<NavigatorViewModel>()
.AsSelf()
.WithParameter(
(p, c) => true, 
(p, c) => new[] 
{ 
// Load your CategoryViewModels here or any other data that you would like
});

您可以查看AutoFac关于WithParameter方法的文档