问题描述
我在 Xamarin.Forms 应用程序中使用 ReactiveUI 和 Prism。
Prism,一方面控制页面出现/消失信号,并在视图导航动画开始之前发送消失事件。
另一方面,ReactiveUI 提供了 view.WhenActivated(...)
扩展以仅在显示视图时建立视图绑定。 view.WhenActivated()
在消失事件被触发时被释放。
由于 Prism 在仍然显示 view-to-unload 时发送消失事件,因此视图绑定在客户眼前消失。
为了防止这种情况发生,我尝试注册我自己的 ReactiveUI 实现的 IActivationForViewFetcher
(ReactiveUI.XamForms.ActivationForViewFetcher
) 副本,并在动画尚未结束时延迟消失事件(1 秒)。
var appearing = Observable.FromEvent<EventHandler,bool>(
eventHandler =>
{
void handler(object sender,EventArgs e) => eventHandler(true);
return handler;
},x => page.Appearing += x,x => page.Appearing -= x)
// timestamp the event for later take-last scan
.Timestamp();
var disappearing = Observable.FromEvent<EventHandler,bool>(
eventHandler =>
{
void handler(object sender,EventArgs e) => eventHandler(false);
return handler;
},x => page.disappearing += x,x => page.disappearing -= x)
// timestamp the event for later take-last scan
.Timestamp()
// slow-down the disappearing event to avoid visual un-binding effects
// like re-enabled buttons,values unset and so on.
.Throttle(TimeSpan.FromSeconds(1))
.ObserveOn(RxApp.MainThreadScheduler);
return Observable
.Merge(appearing,disappearing)
.Scan(new Timestamped<bool>(false,DateTimeOffset.MinValue),(last,n) => n.Timestamp >= last.Timestamp ? n : last)
.Select(v => v.Value)
.distinctUntilChanged();
这在用户速度较慢的情况下效果很好,但在某些情况下,消失延迟可能会将活动页面呈现为停用状态。
现在我的问题:
有没有更简单的方法来延迟消失信号,但要避免它作为一个整体,以防页面在延迟窗口中重新激活?
多一点信息:出现和消失事件可能会被框架多次触发,因此取消/激活的页面可能会再次取消/激活而无效。
谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)