2015-12-09 2 views
0

Мне нужна помощь в архитектуре проекта. Я не могу получить, как ViewModel может взаимодействовать с Android-сервисом. Я создаю Inteface, который может вызывать некоторые функции платформы.MVVMCross ViewModel взаимодействует с Android-сервисом

public interface IGeoLocationWatcher 
{  
    GeoLocation Location { get; set; }  
    void StartLocationService(); 
    void StopLocationService();   
} 

А на андроид платформы я понимаю, этот интерфейс

[Service] 
public class DroidGeolocationWatcher : Service, 
             Android.Gms.Common.Apis.GoogleApiClient.IConnectionCallbacks, 
             Android.Gms.Common.Apis.GoogleApiClient.IOnConnectionFailedListener, 
             Android.Gms.Location.ILocationListener,          
             IGeoLocationWatcher 
{ 
    public GeoLocation Location { get; set; }  
    public void StartLocationService(); 
    public void StopLocationService(); 
} 

Когда я получаю новое место, я призываю мое пользовательское сообщение (событие), подписавшимся в ViewModel. Если приложение в фоновом режиме отправляет уведомление или когда на переднем плане - я обновляю свой интерфейс.

WeakSubscribe<GeoLocationChangedMessage> ((s)=> { 
    Location = s; 
    RaisePropertyChanged(() => Location); 
}); 

Но, похоже, он не работает. Мне нужно сообщить, что я делаю неправильно или другой подход. Спасибо за внимание.

ответ

0

Метод subscribe возвращает токен типа MvxValueEventSubscription<T> Вам необходимо сохранить этот токен в свойстве модели вашего вида, иначе маркер может быть удален до получения вами уведомления.

если вы хотите прекратить получать уведомления, вы можете просто сделать это:

if (this.token != null) 
{ 
this.token.Dispose(); 
this.token = null; 
} 
+0

Это не то, что я хочу, но спасибо за ответ. –

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