Xamarin.Forms + ReactiveUI MasterPage OnItemListener

时间:2017-12-14 22:30:57

标签: xamarin.forms reactiveui

如何在MasterPage后面的代码中和function sortCallback(a, b) { function padParts(version) { return version .split('.') .map(function (part) { return '00000000'.substr(0, 8 - part.length) + part; }) .join('.'); } a = padParts(a); b = padParts(b); return a.localeCompare(b); } 函数内收听MasterPage.OnItemSelected?或者我应该在viewmodel中以某种方式执行此操作?

2 个答案:

答案 0 :(得分:1)

您可以使用Observable.FromEventPattern。 假设您在MasterPage中使用ListView:

this.WhenActivated (d => {
    Observable.FromEventPattern (h => MasterPage.ListView.ItemSelected += h, 
                                 h => MasterPage.ListView.ItemSelected -= h)
              .Subscribe (DoSomethingWithMySelectedItem)
              .DisposeWith (d);
});

答案 1 :(得分:0)

在Qonstukt的帮助下,我最终做到了:

Observable.FromEventPattern<SelectedItemChangedEventArgs>(h => masterPage.ListView.ItemSelected += h,
                                                h => masterPage.ListView.ItemSelected -= h)
                            .Subscribe(x => OnItemSelected(x.Sender, x.EventArgs))
                            .DisposeWith(disposables);

...

void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        if (e.SelectedItem is MasterPageItem item)
        {
            var nextPage = new NavigationPage((Page)Activator.CreateInstance(item.TargetType));
            nextPage.BarBackgroundColor = Constants.ToolbarColor;
            nextPage.BarTextColor = Constants.ToolbarTextColor;
            Detail = nextPage;
            masterPage.ListView.SelectedItem = null;
            IsPresented = false;
        }
    }