Мне нужно явно закрыть и удалить объект SerialPort
, когда мое MVF-приложение MVVMCross завершает работу, то есть при нажатии на красный X. Для этого мне нужно вызвать метод текущей ViewModel.Захват события OnExit в WPF с MVVMCross
Я пытался сделать это, следуя MVVMCross n=42 video и добавления интерфейса IKillable
с методом public abstract void KillMe()
в качестве abstract BaseViewModel
класса, который реализует IKillable
. Затем, в проекте WPF, я добавил класс BaseView
, точно так же, как в видео. На данный момент я могу получить доступ к методам текущей модели представления.
В видео примеры являются IOS, Droid, и Windows Phone, где один не может override
события, такие как OnNavigatedTo
и т.д. В WPF, нет OnExit()
, которые я мог бы override
доступны в BaseView
классе.
Мне интересно, есть ли способ, которым я могу назвать этот метод текущей модели представления, когда приложение выходит? Я могу это сделать:
protected override void OnExit(ExitEventArgs e)
{
// Do Something
base.OnExit(e);
}
в App.Xaml.Mvx.cs
класса, который поставляется вместе с пакетом MVVMCross NuGet, и я считаю, что это правильное место, чтобы поместить код, который я хочу, чтобы выполнить при выходе из программы. Проблема в том, что у меня нет никакой ссылки на текущую модель просмотра.
Если бы кто-нибудь мог мне помочь, я был бы очень признателен. Благодаря!
EDIT/UPDATE:
Я нашел работу вокруг, это кажется несколько "Hacky", но он получает работу. Класс, который содержит ссылку на SerialPort
, мне нужно закрыть, зарегистрирован как одноэлемент в MVVMCross. Итак, я добавил поле типа интерфейса этого одноэлементного класса в класс App.Xaml.Mvx.cs
, а затем в конце DoSetup()
я вызываю Mvx.Resolve<>();
на этот тип и назначаю этот результат в созданное мной поле. Затем у меня есть protected override void OnExit(ExitEventArgs e)
, где я могу вызвать методы Close()
и Dispose()
. Это делает то, что мне нужно.
Меня все еще интересует, если есть лучший, более «правильный» способ сделать это с помощью MVVMCross.