0

我想听听什么是适合这种情况的解决方案。

我在 WPF 应用程序 Caliburn.Micro 框架中使用。我需要访问 SQL Compact DB。在数据库访问中,我使用 LINQ TO SQL。

例如在视图中我有组合框控件或列表框控件。我需要从数据库中加载这些控件的项目。

所以我创建了访问数据库的简单类。

[Export(typeof(IDbManager))]
public partial class DbManager : IDbManager
{

    public IList<Spirit_Users> LoadSpiritUsers()
    {
        var result = from u in _dc.Spirit_Users orderby u.Nick select u;
        return result.ToList();
    }
}

我用 MEF 注入这个类来查看模型类。在我的视图模型类中使用数据库访问类中的使用方法将项目加载到组合框。

[Export(typeof(ILogOnViewModel))]
public class LogOnViewModel : Screen, ILogOnViewModel,
    IPartImportsSatisfiedNotification
{
    [Import]
    internal IDbManager DbManager { get; set; }

    //this property is bind on listbox or comboBox
    public BindableCollection<Spirit_Users> SpiritUsers
    {
        get { return _spiritUsers; }
        set
        {
            _spiritUsers = value;
            NotifyOfPropertyChange(() => SpiritUsers);
        }
    }


    private void ConfigureSpiritUsers()
    {
        //load items from comboBox or listBox
        var users = SettingsDbManager.LoadSpiritUsers();

        //add to the collection which is binded on control in view
        if (users.Count > 0)
        {
            foreach (var user in users)
            {
                SpiritUsers.Add(user);
            }
        }
    }


    protected override void OnActivate()
    {
        ConfigureSpiritUsers();
        base.OnActivate();
    }
}

我不知道我的解决方案是否正确并且最适合带有 MVVVM 的场景 WPF 应用程序。

我还需要创建从视图模型类到数据库的 CRUD 操作。例如将一些对象/数据保存到数据库中。

感谢您的建议。

4

1 回答 1

1

这看起来不错,在ConfigureSpiritUsers您的参考SettingsDbManager中,这是在哪里定义的?应该DbManager改为这个吗?

真的,DbManager是一个SpiritUserRepository,并且可以包括您的其他 CRUD 操作作为接口和具体实现上的方法。只要您的视图模型始终反对抽象,那就没问题了。

此外,您可以将集合填充到SpiritUsers一行中this.SpiritUsers = new BindableCollection(users)。我还将 SpiritUsers 的类型设为IObservableCollection<Spirit_User>,或者更好的是Spirit_User(ie ISpiritUser) 的抽象。

于 2011-02-04T17:24:45.240 回答