Форум программистов, компьютерный форум, киберфорум
Наши страницы

Паттерн Messenger или передача данных между объектами

Войти
Регистрация
Восстановить пароль
Рейтинг: 5.00. Голосов: 2.

Паттерн Messenger или передача данных между объектами

Запись от kenny69 размещена 08.11.2017 в 17:17
Обновил(-а) kenny69 08.11.2017 в 23:00

Часто вижу такой вопрос, как передать данные между формами, классами и т.д.
Один из способов - это использование паттерна Messenger.
Его преимущество в том, что классы могут не знать о существовании друг друга и обмениваются данный через шину сообщений. Таким образом у нас уменьшается связанность компонентов в приложении.

Я покажу на примере Messenger из библиотеки MVVMLight


Допустим у нас такая задача, надо передать данные из дочернего окна в главное.
Создаем проект WPF, добавляем textbox в котором будут отображаться данные переданные из дочернего окна и кнопку отображения дочернего окна (ChildWindow)

И такой обработчик:
C#
1
2
3
4
5
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var wnd = new ChildWindow();
            wnd.Show();
        }
В ChildWindow также добавляем TextBox для ввода текста, который хотим отправить в главное окно.
А также кнопку для отправки.

Устанавливаем package через Package manager с помощью команды

Install-Package MvvmLight

В ChildWindow в обработке прописываем отправку с помощью Messenger из MvvmLight
C#
1
 Messenger.Default.Send(TextBox1.Text, "token1");
Обратите внимание на "token1". Он нужен для того чтобы разделять сообщения по ключу, если они одинакового типа. Потому что у нас в системе может быть несколько сообщений типа string в нашем случае. А вообще лучше для каждого типа сообщений создавать свой класс.

Не забываем добавить пространство имен в оба окна для работы с Messenger
C#
1
using GalaSoft.MvvmLight.Messaging;
Теперь надо добавить обработчик в MainWindow, когда сообщение поступит:
C#
1
2
3
4
5
6
7
8
 public MainWindow()
        {
            InitializeComponent();
            Messenger.Default.Register<string>(this, "token1", m =>
             {
                 TextBox1.Text = m;
             });
        }
<string> - указывает, что мы ждем сообщение типа string
this - что получатель данное окно
"token1" - по этому ключу у нас обработка
А дальше обработчик поступившего сообщения, в данном случае мы показываем его в TextBox1


Проект во вложении
Вложения
Тип файла: zip WpfMessenger.zip (1.42 Мб, 10 просмотров)
Размещено в Без категории
Просмотров 177 Комментарии 0
Всего комментариев 0

Комментарии

 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru