繁体   English   中英

如何基于字符串值使用UWP Frame.Navigate()

[英]How can I use UWP Frame.Navigate() based on a string value

首先,我查看了所有建议的问题,但没有一个问题能真正回答我的问题。 我看到了适用于WinRT或WPF的解决方案,但都不适用于UWP。

话虽如此,我正在寻找一种方法来做这样的事情:

private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var pageName = ((ListViewItem)((ListView)sender).SelectedItem).Name;
            var pageObj = ???? //Some way to ref MyNamespace.MyPage.xaml
            MyFrame.Navigate(typeof(pageObj));
        }

我尝试使用以下所有组合:

var pageObj = FindName(pageName);
---
var pageObj = System.Type.GetType(this.GetType().Namespace + "." + pageName);
---
MyFrame.Navigate(typeof(pageObj));
---
MyFrame.Navigate(pageObj);
---
MyFrame.Navigate(typeof(pageName));
---
MyFrame.Navigate(pageName);

还有我记不清的其他内容。 充其量我得到一个NullReferenceException。

我对C#和UWP还是很陌生,因此,如果这不可能,我很抱歉浪费您的时间。 只是,如果我决定在某个时候添加新页面,我就不需要编辑一些switch语句; 我只想添加一个新的ListViewItem并完成它。

此外,这对我来说是一次学习经历。 我已经知道如何进行切换语句。 现在,我想做些更优雅的事情。

预先感谢您提供的任何帮助!

如果只想通过listviewitem字符串值获取页面类型,那是不可能的。 您将必须手动指定用于导航的页面类型。

例如,就像您说的那样,您可以使用Switch语句。

或者,如果您熟悉WindowsTemplateStudio ,则可以创建一个附加属性( NavigateTo )和一个NavigationService帮助器类。 您可以在XAML上使用附加属性,并通过附加属性值获取页面类型,如下所示

var pageType = menuItem.GetValue(NavHelper.NavigateToProperty) as Type;

如果您不了解此代码的功能,建议您使用WindowsTemplateStudio创建一个简单的代码项目,并添加一些断点来调试其代码并了解整个导航过程。

我认为您已经接近解决这个问题。 包含类型名称的字符串很可能不正确。 您将需要包括页面名称在内的整个名称空间。

为了进行测试,我创建了一个名为TestPage的页面,该页TestPageTestPage

Type type = Type.GetType("Sample.Pages.TestPage");
Frame.Navigate(type);

我建议先在没有ListView的情况下尝试此操作,以查看是否可以正常使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM