在WP应用程序中,我有一个树状列表,用户可以在其中看到类别和项目。
如果用户单击item ->,我将导航到item页面。
但是如果用户想要更深入并单击类别->我需要向他显示内部类别和项目,所以这将是伟大的,如果它将有可能再次打开实例这个页面并显示内部类别和项目,因为它有完全相同的逻辑。
我知道,我不能运行一个Page
的多个实例。
我可以在这个页面的当前实例上显示内部类别,只是改变列表框的内容,但是用这种方式我有2个问题:
- 在后退按钮下,我需要显示以前的列表框,所以我需要将所有以前打开的列表框存储在
Stack
中 - 我想为用户显示页面导航动画(后退键也是),他会看到他进入更深的树列表或他回到以前的状态。
也许你们中的一些人已经做了同样的事情,你能给我一些建议吗?
同一个页面可以有多个实例
假设每个类别都有一个唯一的ID,您只需导航到页面并在Query string中提供ID参数。为最顶层的数据保留一个ID(例如0)。
那么,你的分类页面最初将被命名为
NavigationService.Navigate("MyCategoriesPage?categoryId=0");
OnNavigatedTo方法中的解析categoryId并根据Id从后端或存储读取数据。
当用户点击一个类别时,你根据类别id导航到同一页面,例如:
NavigationService.Navigate("MyCategoriesPage?categoryId=12");
Windows Phone保持后退堆栈,因此后退按钮上的导航将被处理。你应该记住的唯一一件事是,如果用户停用和重新激活应用程序,应用程序可能会被删除。在这种情况下,列表框数据将不会被保留。要处理它,请确保遵循OnNavigatedTo方法中的标准模式:
if (!_isInitialized)
{
int categoryId = int.Parse(NavigationContext.QueryString["categoryId"]);
ReadData(categoryId);
_isInitialized = true;
}