【发布时间】:2021-03-07 14:42:34
【问题描述】:
从显示 DATA 的页面的 viewModel 中,我需要显示 SecondaryPage,其中包含这些 DATA 的子集。因此,当单击按钮时,我将过滤器应用于 DATA 并调用 SecondaryPage。当 secondPage 消失时,我通过回调重置过滤器:
private async Task levelClickedAction(object arg)
{
var level = arg as Observable<string>;
if (level == null) return;
// Unselect the clicked item
LevelClicked = null;
isHidden = true; // Prevent from updating primary page
// Apply filter to the data
wordDictionary.SetReviewPlanFilter( Reviews.IndexOf(level) );
// Create secondary page, setup callback and display it
var page = new SecondaryPage();
page.OnDisappearingEvent += ResertFilters;
await Application.Current.MainPage.Navigation.PushModalAsync(new NavigationPage(page));
}
private void ResetFilters(object sender, object e)
{
isHidden = false;
wordDictionary.ResetReviewPlanFilter();
}
我的问题是:
- 我是否需要取消订阅 OnDisappearingEvent 以确保 SecondaryPage 是否正确处理?看来,是的,我这样做是因为处理程序的强引用和我的主页的较长生命周期。正确吗?
- 那么怎么做,何时何地?
我曾尝试在PushModalAsync(new NavigationPage(page)) 之后使用.ContinueWith(),但它会立即被解雇...
问题是在 ResetFilters proc 中,我不再知道该页面...然后我可以创建一个字段而不是 var 页面:
private WordList page;
...
private void ResetFilters(object sender, object e)
{
isHidden = false;
page.OnDisappearingEvent -= ResetFilters;
page = null;
wordDictionary.ResetReviewPlanFilter();
}
但它看起来很丑......有没有更漂亮/更直接的方式?
感谢您的建议。
【问题讨论】:
-
为了完整起见,在我的辅助页面中我添加了:公共事件 EventHandler
标签: events xamarin.forms callback ondisappearing