Глобальный объект для каждого вида - PullRequest
0 голосов
/ 05 марта 2020

В настоящее время я разрабатываю приложение в WPF с использованием шаблона MVVM (без фреймворка). Я использую VS2019, каждое представление является UserControl. Приложение подключено к локальной базе данных MySQLLite.

Когда я запускаю свою программу, у меня есть пользовательское соединение. Когда пользовательское соединение установлено успешно, оно загружает мой объект «Engine» в мой глобальный класс «BaseViewModel» (наследует все ViewModel).

В WinForm, когда я создаю новую форму (представление), я просто передаю свой движок класс в параметрах, и я сохраняю Engine локально в моей форме (не ноль), а затем я имею доступ к своему значению в Engine, как пользователь.

Каков наилучший способ сделать это в WPF с использованием MVVM?

Я пытаюсь перенести Engine в мою ViewModel, когда создаю, но позже он всегда перезаписывает его нулевым. Потому что позже он открывает представление без параметра и вызывает мой конструктор без параметра.

1 Ответ

0 голосов
/ 06 марта 2020

Вы можете создать класс уровня доступа к данным для загрузки вашего движка из БД. Например, он будет называться EngineDataAccess и будет иметь метод GetEngine (). Далее в EngineViewModel вы можете реализовать что-то вроде этого:

private readonly Engine engine;

public string EngineName
{
   get {return engine.Name; }
   set {engine.Name = value; OnPropertyChanged("EngineName");}
}


public EngineViewModel(EngineDataAccess engineDataAccess)
{
    engine = engineDataAccess.GetEngine();
}

В вашем коде:

EngineDataAccess engineDataAccess = new EngineDataAccess();
EngineViewModel engineViewModel = new EngineViewModel(engineDataAccess);
form.DataContext = engineViewModel;

Что не очень хорошо в этом смысле и как это можно сделать лучше: 1 ) получение движка из db при создании процесса модели представления => это будет лучше сделать на модели представления Load ( Данные загрузки MVVM во время или после построения ViewModel? ) 2) использование класса EngineDataAccess вместо интерфейса 3) привязка текстового контекста в codebehind => лучше использовать Io C

Кроме того, я бы рекомендовал вам использовать некоторые MVVM-фреймворки, такие как Galasoft.MVVM. Это делает MVVM более простым.

...