Как отписаться от Materialdesign события?
Возникла проблема с подписками на событие, так как на одно событие повесил 2 разных обработчика, один из обработчиков находится на Window, а второй обработчик на UserControl'e.
В итоге, что я имею:
(2 обработчика для разных событий в Window),
<materialDesign:DialogHost DialogOpened="openLB" DialogClosing="closingLB">
(2 обработчика для тех же событий в UserControl'e).
<materialDesign:DialogHost DialogOpened="openCB" DialogClosing="closingCB">
И из-за этого, получается что идет вызов двух обработчиков для одного события, что вызывает за собой исключение в совершенно другом классе в методе openLB()
Код метода:
private async void openLB(object sender, MaterialDesignThemes.Wpf.DialogOpenedEventArgs eventArgs)
{
await Task.Delay(2000);
IsLogedIn = await validCreds();
if (IsLogedIn)
{
eventArgs.Session.Close();
}
else
{
eventArgs.Session.Close(false);
}
}
На данной строке я ловлю исключение:
else
{
eventArgs.Session.Close(false);
}
Само исключение:
То есть выходит такая иерархия вызово события (принадлежит событию DialogOpened) openCB() -> (принадлежит событию DialogClosing) closingCB() -> (вызов обработчика принадлежащего событию DialogClosing) closingLB() -> (вызов обработчика принадлежащему событию DialogOpened) openLB()
Видео с принципом работы прикрепил ниже, так как мог что-то упустить или плохо расписать
Вопрос конечный заключается в том, как отписаться от данных обработчиков и подписываться только при необходимости? Ибо как я понял тут не работает принцип с самописными event'ами
Видео для наглядности работы
Ответы (1 шт):
else
{
if (eventArgs.Session.IsEnded == false)
{
eventArgs.Session.Close(false);
}
}
