导航到页面后执行命令(ReactiveUI、UWP)

Executing a command after navigating to a page (ReactiveUI, UWP)

我试图在从 PageOnNavigatedTo(NavigationEventArgs e) 得到 NavigationEventArgs 后执行 ReactiveCommand

我的第一次尝试是使用事件可观察对象,但是 NavigateTo 没有事件。

我的第二次尝试在下面分享。似乎 WhenActivatedOnNavigatedTo 之后被调用。到那时 OnNavigated 已经被调用,因此 navigated 不要错过监听事件的机会。

public sealed partial class ShareTargetPage : Page, IViewFor<ShareTargetViewModel>
{
    public event EventHandler<SharedDataEventArg> Navigated;

    private void OnNavigated(SharedDataEventArg e)
    {
        Navigated?.Invoke(this, e);
    }

    private IObservable<EventPattern<SharedDataEventArg>> navigated;

    public ShareTargetPage()
    {
        navigated = Observable.FromEventPattern<SharedDataEventArg>(h => Navigated += h, h => Navigated -= h);

        InitializeComponent();
        ViewModel = new ShareTargetViewModel();

        this.WhenActivated(disposable =>
        {
            navigated
                .Select(x=> x.EventArgs)
                .InvokeCommand(this, x => x.ViewModel.ParseCommand)
                .DisposeWith(disposable);
        });
    }

    protected override async void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);
        var operation = (e.Parameter as ShareOperation);
        OnNavigated(new SharedDataEventArg(operation, await operation?.Data?.GetWebLinkAsync()));

    }

    public static readonly DependencyProperty ViewModelProperty = DependencyProperty
        .Register(nameof(ViewModel), typeof(ShareTargetViewModel), typeof(ShareTargetPage), new PropertyMetadata(null));

    public ShareTargetViewModel ViewModel
    {
        get => (ShareTargetViewModel)GetValue(ViewModelProperty);
        set => SetValue(ViewModelProperty, value);
    }

    object IViewFor.ViewModel
    {
        get => ViewModel;
        set => ViewModel = (ShareTargetViewModel)value;
    }
}

My first attempt was to use event observables, however there is no event for NavigateTo.

您可以创建一个主题并在覆盖中发出 Subject.OnNext(MyOnNavigatedToEventInformation)

My second attempt is shared below. It seems that WhenActivated is getting called after OnNavigatedTo. By that time the OnNavigated is already called and hence the navigated don't miss the opportunity to listen the the event.

您可以使用 PublishConnect 来创建连接的可观察对象吗?您应该能够在可观察对象中捕获事件,然后在 .Connect().

时发出完整序列

Publish

Connect

问题,您期望 WhenActivated 应该在 OnNavigatedTo 之前调用吗?