【发布时间】:2020-07-20 05:05:46
【问题描述】:
我正在将应用程序从 WinRT 移植到 UWP。 (我已经移植到 iOS 和 Android)
我的应用有多个页面。我需要能够确定当前查看的是哪个页面,然后更新内容。 (由于各种原因,DataBinding 不是一个选项。)
我有一个在后台运行的例程(不是在 UI 线程上),从调度计时器调用。
在WinRT中,我是这样处理的:
// If current window is MainPage, then update the displayed fields
var _Frame = Window.Current.Content as Frame;
Page _Page = _Frame.Content as Page;
if (_Page is MainPage)
{
MainPage _XPage = _Frame.Content as MainPage;
_XPage.SetFieldsTick(spoton);
}
由于 UWP 为 Windows.Current.Content 返回 null,因此我在 Navigation 例程中设置了标志以跟踪当前视图。我想正确地解决这个问题。
下一步是如何实际更改字段。
我在 XAML 代码后面有一个设置字段的例程
public void SetFieldsTick(bool spot)
{
UTC_Data.Text = Vars.DateStrZ;
}
如果我想从我的后台例程中引用它,那么例程必须是静态的。如果我进行此更改,则例程无法引用页面上的字段,因为它们不是静态的。
我知道这可能很明显,但我很难过。
提前致谢。
【问题讨论】:
-
你的后台例程中能否成功获取当前页面?另外,您提到要在后台例程中调用SetFieldsTick方法,当您在例程中获取MainPage实例时,可以直接调用_XPage.SetFieldsTick,为什么一定要将SetFieldsTick方法设为静态?你能提供更多关于这些的细节吗?
-
当我运行程序时,行“var _Frame = Window.Current.Content as Frame;”引发异常:“Window.Current.Content = 'Window.Current.Content' 引发了类型为 'System.NullReferenceException' 的异常”
-
SetFieldsTick 在页面加载和工作正常时被调用,当从类中调用时。在后台例程中,由于_XPage 未初始化,我将其称为“Home_Page.SetFieldsTick(true);”我收到编译错误“非静态字段、方法或属性需要对象引用。”如果我将例程设为静态,我会收到相同的编译错误,但这次是页面中的每个字段引用.
-
我尝试向 Home_Page 添加一个计时器,但是当它尝试调用 SetFieldsTick 时,我收到一条消息“UTC_Data.Text = 'UTC_Data.Text' 引发了 'System.Exception' 类型的异常”( UTC_Data 是我要更新的第一个字段)那么,如何在不使用数据绑定的情况下从后台更新当前视图?
-
当我尝试测试时,我没有收到这些异常。你能提供一个简单的样本,可以复制给我们测试吗?会更有帮助。
标签: xaml view uwp winrt-xaml updating