Mvvm Xamarin表单-应用程序从推送通知打开-绑定属性已更改,没有任何效果
我有一个Mvvm Xamarin表单-应用程序从推送通知打开-绑定属性已更改,没有任何效果,mvvm,xamarin.forms,push-notification,system.reactive,scheduling,Mvvm,Xamarin.forms,Push Notification,System.reactive,Scheduling,我有一个ViewModel,它监听推送通知,并在收到通知时将bool设置为true。当该布尔值为真时,相应视图中的图标将变为红色 当应用程序位于前台并收到推送时,它将按预期工作。但是,当应用程序处于后台并通过通知打开时,图标颜色不会改变 代码如下: Disposables .Add(pushService .NewMessage .SubscribeOn(_schedulerProvider.Background) .ObserveO
ViewModel
,它监听推送通知,并在收到通知时将bool设置为true。当该布尔值为真时,相应视图中的图标将变为红色
当应用程序位于前台并收到推送时,它将按预期工作。但是,当应用程序处于后台并通过通知打开时,图标颜色不会改变
代码如下:
Disposables
.Add(pushService
.NewMessage
.SubscribeOn(_schedulerProvider.Background)
.ObserveOn(_schedulerProvider.Foreground)
.Subscribe(_ => HasNewMessages = true, LogError));
为了试图了解发生了什么,我做了:
Disposables
.Add(pushService
.NewMessage
.SubscribeOn(_schedulerProvider.Background)
.ObserveOn(_schedulerProvider.Foreground)
.Subscribe(async _ =>
{
await _navigationService.DisplayAlert("push", "push", "ok");
HasNewMessages = true;
}, LogError));
果不其然,当应用程序处于后台并通过通知打开时,会出现警报,图标变为红色
更新
我想,可能是因为我不明白的原因,当应用程序从通知打开时,事件的观察没有在UI线程上发生,所以我尝试了以下方法,但这当然不是问题所在
Disposables
.Add(pushService
.NewMessage
.SubscribeOn(_schedulerProvider.Background)
.Subscribe(_ => Device.BeginInvokeOnMainThread(() => HasNewMessages = true), LogError));
另外,请注意,一旦应用程序通过通知打开,它就不会在前台对通知做出“反应”。代码是“我的问题”很好。 问题在于:
protected override void OnResume() { ImageService.Instance.SetExitTasksEarly(false); }
我的图标(应该变成红色的图标)是来自(TheGreat)的Svg,上面的调用阻止了它(不知何故)改变颜色。一旦我删除了覆盖,一切都按预期进行。属性
HasNewMessages
是什么样子的?当更新了HasNewMessages
时,您是否在ViewModel上触发了PropertyChanged
事件?绑定很好(在应用程序中是数百万中的一个;-)。啊,好的。我想是这样的,但我想问一下也无妨。我感觉这与应用程序生命周期和订阅被处置或暂停有关,或者与这些概念有关。