【发布时间】:2017-12-19 02:58:49
【问题描述】:
如何在 MasterPage 后面的代码和 this.WhenActivated(disposables => {}); 函数中收听 MasterPage.OnItemSelected?或者我应该以某种方式在视图模型中执行此操作?
【问题讨论】:
如何在 MasterPage 后面的代码和 this.WhenActivated(disposables => {}); 函数中收听 MasterPage.OnItemSelected?或者我应该以某种方式在视图模型中执行此操作?
【问题讨论】:
您可以使用Observable.FromEventPattern。 假设您在 MasterPage 中使用 ListView:
this.WhenActivated (d => {
Observable.FromEventPattern (h => MasterPage.ListView.ItemSelected += h,
h => MasterPage.ListView.ItemSelected -= h)
.Subscribe (DoSomethingWithMySelectedItem)
.DisposeWith (d);
});
【讨论】:
在 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;
}
}
【讨论】: