2015-06-15 2 views
4

Мне нужно явно закрыть и удалить объект 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.

ответ

0

Если закрыть приложение OnSuspending метод называется и там я бы написать код для SerialPort и потому, что вы хотите, чтобы огонь метод тока ViewModel Я бы просто объект, представляющий текущий ViewModel в App.xaml.cs, поэтому я могу вызвать его метод внутри OnSuspending()

Я бы сделал это таким образом, но я не знаю, лучше ли это или что вам нужно. Но, возможно, это даст вам представление.

Смежные вопросы