6 / 6 / 5
Регистрация: 28.03.2014
Сообщений: 26
1

Привязка обработчика из другого класса

20.08.2016, 17:06. Показов 2106. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго вечера, форумчане! Есть такая проблемка: в моём проекте есть несколько форм, у каждой формы есть свои обработчики событий. В некоторых случаях, например, при закрытии, для каждой формы выполняется одно и то же действие. Сейчас у меня есть три одинаковых обработчика закрытия окна с одним и тем же кодом. Хочется вынести этот обработчик в один статический класс и привязаться к нему из каждой формы. Я могу выполнить подписку в конструкторе формы типа такой:
C#
1
this.button.Click += MyStaticClass.ButtonClick
Но что-то меня в ней смущает. Возможно, лучше стоит делать это в разметке. Только я не могу найти подходящих примеров привязки эвентов из другого класса. Что посоветуете?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.08.2016, 17:06
Ответы с готовыми решениями:

Привязка поля одного класса к полю другого через INotifyPropertyChanged
Здравствуйте. есть вопрос: есть класс в котором реализован INotifyPropertyChanged и поле public...

Привязка к коллекции: как программно (скажем, из обработчика кнопки) добавить в эту коллекцию новый item
Здравствуйте! Есть пример из MSDN о привзке к коллекции. Не могу сообразить как программно...

Вызвать обработчик события внутри другого обработчика
У окна есть обработчик Loaded="Window_Loaded", который мониторит состояние всего окна. Нужно чтобы...

Привязка данных. Замена ItemsSource из другого потока
Привет. Проблема на самом деле какая то странная. У меня есть ObservableCollection. Я ее заполняю...

3
burning1ife
1462 / 1284 / 293
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
21.08.2016, 11:01 2
Для таких целей используются window manager или что-то подобное.
Так же можно сделать используя паттерн messenger
http://dotnetpattern.com/mvvm-light-messenger
1
6 / 6 / 5
Регистрация: 28.03.2014
Сообщений: 26
22.08.2016, 17:35  [ТС] 3
kenny69, изучил сегодня предложенный вами паттерн, но не совсем понял, в чём его особенность. Например, для того чтобы, используя MVVMLight, запросить подтверждение на закрытие окна, советуют использовать подобную конструкцию:

View:
C#
1
2
3
4
MyWindow() 
{
    Closing += viewModel.OnWindowClosing;
}
ViewModel:
C#
1
2
3
4
public void OnWindowClosing(object sender, CancelEventArgs e) 
{
   // Логика
}
Но зачем мне использовать подобный шаблон, если я и так могу подписаться на любой метод произвольного класса, как показывал выше?
0
burning1ife
1462 / 1284 / 293
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
22.08.2016, 17:46 4
Я просто не знал какие действия выполняются.
Если нужен возврат ответа (закрыть? "Yes", "No")
То здесь либо менеждер окон.
Либо сделать базовую ViewModel и в ней прописать ClosingCommand. А остальные 3 от нее наследовать.
И лучше привязывать события через EventToCommand
А не
Цитата Сообщение от Lovk4ch Посмотреть сообщение
Closing += viewModel.OnWindowClosing;
XML
1
2
3
4
5
6
<i:Interaction.Triggers>
    <i:EventTrigger EventName="Closing">
        <cmd:EventToCommand Command="{Binding Mode=OneWay, Path=ClosingCommand}"
                            PassEventArgsToCommand="false" />
    </i:EventTrigger>
</i:Interaction.Triggers>
1
22.08.2016, 17:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2016, 17:46
Помогаю со студенческими работами здесь

Привязка координат одного Shape относительно другого
Доброго всем времени суток! Имеется задача сделать некие сложные &quot;узлы&quot;, состоящие из подложки,...

GridViewColumn привязка к свойству Width другого элемента
Всем привет! Не могу разобраться с ListView. У меня 2 проблемы: 1. Не работает привязка свойства...

Из одного класса обратиться к свойству progressBar из другого класса (основного окна)
Привет! :) Помогите пожалуйста нубу (мне). У меня есть два класса. Первый (основной), его код:...

[mvvm] Привязка данных которые изменяются из другого потока
здравствуйте, есть проблема следующего рода: есть поток(Task) который получает данные из сети и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru