我现在正在构建一个WinRT应用程序,我正面临着这个问题。
我想要实现的是我需要阅读或修改我导航的上一页的属性。
所以,让我们说我有两个页面:with tempfile.NamedTemporaryFile('w+t') as f:
f.write(mylist)
f.flush()
... rest of code using temp file ...
和MainPage
。
我从WatchPage
导航到WatchPage
并在MainPage
WatchPage's
事件内我需要访问OnNavigatedTo
内的属性,而不使用导航参数。
我怎样才能做到这一点?
MainPage
答案 0 :(得分:1)
使用现有框架无法完成您尝试做的事情。也就是说,BackStack中不存在对上一页实例的引用。唯一存在的是,老实说,重新创建实例的方法。也就是说,BackStack包含类型和参数。使用这两个元素,您应该能够在用户在Frame中导航回来时重新实例化该类。顺便提一下,这些成分包括类型和可序列化参数 - 只有可序列化参数,app才能将BackStack保存到NavigationState,并在应用程序暂停/终止时可靠地恢复它。
这就是故事,现在是你的问题。我认为有几种可能的解决方案,老实说,我认为其中任何一种都是可以接受的。
第一个警告是你必须使用NavigationCacheMode = Enabled
。如果没有这个,您的页面(包括上一页)将在每个导航中重新创建,包括Back。这是UWP的一个重要行为,因为它假定您的页面已从内存中删除以节省总体占用空间。设置NavigationCacheMode将覆盖它。
这很容易吗?像这样:
public readonly static MainPage Instance;
public MainPage() {
Instance = this;
}
请注意这一点,因为它要求您的视图相互引用。这是一个相当小的风险,恕我直言。
使用这样的Navigate(参数)最容易实现。
// MainPage
public void GoAway() {
this.Frame.Navigate(typeof(SecondPage), this);
}
// SecondPage
MainPage MainPage;
public void OnNavigatedTo(object parameter) {
MainPage = parameter as MainPage;
}
请注意这一点,因为它要求您传递无法序列化的内容。但有时候,这是可以接受的。
这些都有意义吗?
祝你好运。
答案 1 :(得分:0)
我建议使用静态属性和方法创建一个静态类。我不认为你试图实现的是一个好习惯..相反,这是我的例子:
public static class Shared
{
public static string property = "something..";
public static async Task<bool> Method()
{
await Task.Delay(400);
return false;
}
}
然后,您可以调用方法,从任何位置获取或设置属性:
bool result = await Shared.Method();