WPF / MVVM - как выполнять команды при запуске? - PullRequest
1 голос
/ 04 февраля 2011

Я пишу приложение WPF, следуя принципам MVVM.

Я не хочу выполнять команду при запуске - я сомневаюсь, какой метод лучше?

ViewModel должно быть безразлично, есть ли какие-либо виды, верно?

Тогда можно ли делать что-либо как последнее в конструкторе VM? Или есть событие «приложение запущено и работает, вся инициализация завершена», которое я могу подключить?

Неправильно подключать его к модели представления?

Чтобы быть более конкретным, я хотел бы сделать как Visual Studio и загрузить «самое последнее решение», если пользователь выбрал это в настройках. Если пользователь вручную загружает решение через GUI, я запускаю поток в MainFormViewModel и могу обработать загрузку в последних строках конструктора?

Есть мысли?

Андерс, Дания

Ответы [ 5 ]

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

Подход Windows.Interactivity или асинхронная загрузка их предпочтений из конструктора одинаково жизнеспособны - альтернатива существует, если вы используете MefedMVVM framework.

Вы также можете импортировать IContainerStatus для присоединения к представлению, загружаемому полностью из модели представления (и, следовательно, ничего не забывающего делать в XAML). Дополнительная информация доступна здесь

0 голосов
/ 08 февраля 2011

Это нормально, если и когда вы устанавливаете контекст в коде, но не если вы делаете это из xaml - ради прозрачности и гибкости следует рассмотреть возможность поддержки как кода, так и xaml.

Другой подход может бытьвызвать что-то на вашей модели из xaml, когда будут выполнены определенные критерии.

Я полагаю, что для этого подхода можно использовать раскадровку.

/ Torben Falck, Strongminds, Дания, www.strongminds.dk

0 голосов
/ 07 февраля 2011

Я действительно хотел избежать вызова методов из конструктора ViewModel - и, на мой взгляд, активация событий из конструктора делает именно это (или, по крайней мере, при использовании Prism, как я (должен был упомянуть)).* Я закончил тем, что выполнил простую вещь и просто вызвал метод Loaded в моей основной ViewModel после завершения строительства.

Тем не менее, Скотт выделился как ответчик - спасибо всем, что нашли время.зрения, даже если в конце концов я выбрал другой путь.

Андерс, Дания

        var mainViewProvider = ObjectFactory.GetInstance<IMainViewProvider>();
        var mainWindowViewModelProvider = ObjectFactory.GetInstance<IMainWindowViewModelProvider>();

        var mainWindow = mainViewProvider.GetView();
        var mainWindowViewModel = mainWindowViewModelProvider.GetViewModel();
        mainWindow.DataContext = mainWindowViewModel;

        mainWindowViewModel.Loaded(Settings.Default.LoadLatestOnStart);

        mainWindow.Show();
0 голосов
/ 05 февраля 2011

Я бы представил Контроллеры , которые отвечают за рабочий процесс пользовательского интерфейса. Они знают, когда приложение запущено, и они могут выполнять команды. Это не противоречит шаблону MVVM. Если вам интересно, как это работает, вы можете найти примеры приложений из WPF Application Framework (WAF) , интересный.

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

Что вы можете сделать, это использовать MainForm (тот, который должен загрузить решение) Loaded событие.

Используйте Windows.Interactivity EventTrigger, чтобы присоединить команду к Loaded событие.И при выполнении этой команды загрузите решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...