UWP访问现有页面实例

4
我正在开发一个使用NavigationView进行页面导航的UWP应用程序。其中,ConnectionPage用于打开和管理套接字连接,因此有像SendCommandReceive等方法。其他的CameraPage需要访问这些方法。如果我导航到ConnectionPage,则会像平常一样创建这个类的实例,如果我导航到CameraPage,则会创建这个类,一切都如预期那样。
我的问题是,如何在CameraPage中使用ConnectionPage的连接和方法?

MainPage.xaml.cs导航代码

    private void NavView_Navigate(NavigationViewItem item) {
        switch (item.Tag) {
            case "home":
                rootFrame.Navigate(typeof(HomePage)); break;
            case "connection":
                rootFrame.Navigate(typeof(ConnectionPage)); break;
            case "camera":
                rootFrame.Navigate(typeof(CameraPage)); break;
        }
    }

在之前的项目中,我的做法是将Connection类的实例传递给需要它的类的构造函数。

谢谢大家

1个回答

1
当您从页面导航时,该页面将从内存中删除(只要没有任何东西将其保留在那里,否则可能会出现内存泄漏)。
解决此问题的正确方法是创建一个单独的类,其中包含您需要的方法,并可用于两个页面 - 它可以是静态类或更好的单例类(仅具有一个实例的类)。无论如何,为了使多个页面都能使用单个状态对象,您都必须将其从页面中分离到一个新类中。

这是一个很好的想法,适用于我的连接对象和相关方法。你有没有想过如何从CameraPage访问基于ObservableCollectionConnectionPage中的ListView - cybertronic
你同样可以用相同的方法处理集合属性 :-). 实际上,对于 UWP 应用程序来说,推荐的方法是构建 MVVM 架构,其中你需要构建视图模型类,这些类专门用于保存适合展示的数据。 - Martin Zikmund
ViewModel类应该是静态的,这样它们可以被所有视图访问,对吗? - cybertronic
如果您使用MVVM框架,如MVVM Light或Prism,则视图模型可以是单例(因此可以从服务定位器中访问)或在导航堆栈中维护。更好的解决方案可能是创建一个单例服务来提供数据。单例不是静态的,而是一个普通类,只有一个实例。优点是单例可以实现包括INotifyPropertyChanged在内的接口。 - Martin Zikmund
在这里查看有关 Singleton 的信息 - http://csharpindepth.com/Articles/General/Singleton.aspx - Martin Zikmund

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接