Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Multi-Window приложение, MVVM, Login 
:(
    Опции темы
Wanderer2019
Дата 20.4.2011, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: нет
Всего: 17



Привет,

Подскажите, как правильно в условиях MVVM организовать работу с дочерними окнами. 

К примеру окно типа Login. Кто должен его создать и подцепить к его DataContext ViewModel? App.xaml.cs или ShellViewModel или другой вариант?



PM ICQ MSN   Вверх
likegift
Дата 20.4.2011, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 14.10.2008

Репутация: 2
Всего: 3



примерно так:
App.xaml.cs
Код

 public partial class App : Application
    {
        private void OnStartup(object sender, StartupEventArgs e)
        {            
            Views.LoginView  lView = new Views.LoginView();
            lView.DataContext = new ViewModels.LoginViewModel();
            lView.ShowDialog();           
        }
    }

PM MAIL   Вверх
Kefir
Дата 21.4.2011, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 22
Всего: 87



Если просто касательно дочерних окон, то проще и удобнее всего через мессенжер (например в LightMVVM он есть, я писал свой). Получается нечто вроде маршрутизатора событий. Работает примерно так (у меня):

Суть: VM посылает какие-то свои сообщения через маршрутизатор. V подписывается на нужные сообщения и показывает окна по мере необходимости. Можно сервисом сделать или ещё как - дело хозяйственно. И в юнит-тестах можно просто подменять обработчиков.
Код

public class MyWindow : Window, IMessageListener
{
    public MyWindow
    {
        Messenger.Register(MyViewModel.RequestInfoFromUser, this);
    }
    
    public IMessageListener.ReceiveMessage(object message, object args)
    {
        if(message == MyViewModel.RequestInfoFromUser)
        {
            var window = new MyInfoRequestWindow();
            window.ShowDialog();
            args.Result = window.Result;
            args.Handled = true;
        }
    }
}

public class MyViewModel
{
    public static readonly object RequestInfoFromUser = new object();
    
    public void DoSmth() 
    {
        var result = Messenger.Send(MyViewModel.RequestInfoFromUser);
    }
} 


Дальше дотачивать до своих нужд (классы для сообщений, к примеру).
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.