WPF MVVM - создать модель из базы данных - PullRequest
0 голосов
/ 04 февраля 2011

Я хотел бы услышать, что является подходящим решением для этой ситуации.

Я использую в приложении WPF Caliburn.Micro Framework. Мне нужно иметь доступ к SQL Compact DB. При доступе к БД я использую LINQ TO SQL.

Например, в поле зрения есть элемент управления comboBox или listBox. Мне нужно загрузить элементы этих элементов управления из БД.

Так я создаю простой класс по доступу к БД.

[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 для просмотра класса модели. Об использовании метода из класса при доступе к БД в моем классе модели представления при загрузке элементов в comboBox.

[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();
    }
}

Я не знаю, является ли мое решение правильным и наиболее подходящим для сценариев WPF-приложения с MVVVM.

Также мне нужно создать операцию CRUD из класса модели представления в БД. Например, сохранить некоторый объект / данные в базе данных.

Спасибо за совет.

1 Ответ

1 голос
/ 04 февраля 2011

Это выглядит хорошо, в ConfigureSpiritUsers вы ссылаетесь SettingsDbManager, где это определено?Должно ли это быть DbManager вместо этого?

Действительно, DbManager - это SpiritUserRepository, и может включать другие ваши операции CRUD в качестве методов интерфейса и конкретной реализации.Пока ваши модели представлений всегда работают против абстракций, это нормально.

Кроме того, вы можете заполнить коллекцию SpiritUsers в одну строку this.SpiritUsers = new BindableCollection(users).Я бы также сделал тип SpiritUsers IObservableCollection<Spirit_User> или, что еще лучше, абстракцией Spirit_User (т.е. ISpiritUser).

...