Я неправильно понимаю события в C# WPF?
Я работаю над приложением в WPF, используя принтер с SDK, который говорит, что у него есть событие StatusUpdate. До сих пор я не могу получить статус, чтобы вернуться, даже когда я выполняю действие, которое, как я знаю, должно вызвать его.
Я использовал этот код в приложении windows forms, и он работает так, как должен.
Я подозреваю, что есть проблема с кодированием его в WPF с использованием дизайна MVVM. Я попытался поместить код обработчика событий в код MainView позади, а затем в MainViewModel. Я создал отдельный clss, чтобы посмотреть, смогу ли я заставить его стрелять и оттуда.
Есть ли у кого-нибудь предложения о том, что я мог бы сделать с событиями, которые будут запускаться в WPF?
Или я упускаю что-то еще о событиях?
Что я уже пробовал:
Я попытался поместить код обработчика событий в код MainView позади, а затем в MainViewModel. Я создал отдельный clss, чтобы посмотреть, смогу ли я заставить его стрелять и оттуда.
Foothill
Можете ли вы указать, какой тип события вы пытаетесь вызвать? WPF имеет два различных типа событий, которые можно свободно называть сверху вниз (использует EventArgs) и снизу вверх (использует RoutedEventArgs). События сверху вниз, такие как MouseDown, поднимаются из слоя view, но события снизу вверх поднимаются из слоя Dispacher (Windows Message Pump), например PreviewMouseDown.
FlywheelJack
Я не мог начать догадываться, но я могу попробовать :D
Приложение использует Microsoft.PointOfService для получения информации о принтере и т. д. и реализует свой собственный StatusUpdateEventHandler для обработки событий. Это почти похоже на сценарий "снизу вверх", поскольку он отслеживает события состояния, которые не обязательно запускаются Пользователем в пользовательском интерфейсе.
Foothill
Потребовалась минута, чтобы найти, но ваше событие статуса вызывается прикладным уровнем. Например, OnStatusChanged += HandleStatusChange; где подпись обработчика-HandleStatusChange(Object sender, StatusUpdateEventArgs e) {//do something }
FlywheelJack
В течение дня я пробовал разные способы;
в основном они выглядят так,
охраняемых недействительными AddStatusUpdateEvent(объект-источник события)
{
Метод eventinfo statusUpdateEvent = источник события.метод GetType().Помощью Getevent("StatusUpdateEvent");
if (statusUpdateEvent != null)
{
statusUpdateEvent.AddEventHandler(eventSource, new StatusUpdateEventHandler (OnStatusUpdateEvent));
}
}
FlywheelJack
Сейчас придется уйти, завтра попробую еще раз, спасибо за помощь.
Foothill
Быстрый вопрос: вы пытаетесь реагировать на события, исходящие от принтера?
FlywheelJack
Обновления состояния поступают с принтера, но через объект, созданный библиотекой точек обслуживания Microsoft. Таким образом, создается объект обслуживания, который затем отслеживает и сообщает Все, что связано с принтером (принтер точки обслуживания-это тот, который может печатать квитанции, обрабатывать чеки и т. д.)
Philippe Mori
Я никогда не видел такого кода. Что должен делать этот код?