C# 根据itemview单击的项目导航到页面

C# 根据itemview单击的项目导航到页面,c#,xaml,windows-store-apps,C#,Xaml,Windows Store Apps,我有一个绑定到gridview控件的简单列表,在itemview的单击事件发生时,我希望导航到该页面 我的班级看起来像 public class GetMenu { public string titleName { get; set; } public string imagePath { get; set; } public string pagePath { get; set; } } 带有列表的数据示例 new GetMe

我有一个绑定到gridview控件的简单列表,在itemview的单击事件发生时,我希望导航到该页面

我的班级看起来像

public class GetMenu
    {
        public string titleName { get; set; }
        public string imagePath { get; set; }
        public string pagePath { get; set; }
    }
带有列表的数据示例

new GetMenu(){titleName = "Services", imagePath = "Bouquets.xaml", pagePath="Services.xaml"}
对于点击甚至有以下内容

void ItemView_ItemClick(object sender, ItemClickEventArgs e)
    {
    }

我相信我需要从e中提取点击事件数据,我有点不确定该如何做。

如果我正确理解了您的问题,即您希望获得“点击”项目,那么应该很容易:

var getMenu = (GetMenu)e.ClickedItem;
现在您有了该项,可以使用其中的属性作为导航参数

这就是你的想法吗

[编辑]

导航本身也相当简单。如果您处于代码隐藏状态,您必须:

Frame.Navigate(typeof(YourViewForTheItem), parameters);
e、 g

参数
是一个
对象
,因此您必须在目标视图的
on导航中将其适当地强制转换为

如果您使用的是任何类型的MVVM框架,那么也有相应的服务,例如Caliburn.Micro有
INavigationService

当然,如果你事先知道类型的话

如果要从现有字符串创建“类型”本身,则必须使用反射:

var viewType = Type.GetType("YourStoreApp.Views."+getMenu.pagePath.Substring(0, getMenu.pagePath.LastIndexOf("."));
假设
页面路径
不为空

类型字符串必须是完全限定的名称,即完整的程序集名称和类型(不带扩展名),例如“YourStoreApp.Views.Services”。但是,文件名必须完全镜像类型名才能工作

现在您可以:

Frame.Navigate(viewType);

如果我正确理解了您的问题,即您希望获得“单击”项目,那么它应该相当容易:

var getMenu = (GetMenu)e.ClickedItem;
现在您有了该项,可以使用其中的属性作为导航参数

这就是你的想法吗

[编辑]

导航本身也相当简单。如果您处于代码隐藏状态,您必须:

Frame.Navigate(typeof(YourViewForTheItem), parameters);
e、 g

参数
是一个
对象
,因此您必须在目标视图的
on导航中将其适当地强制转换为

如果您使用的是任何类型的MVVM框架,那么也有相应的服务,例如Caliburn.Micro有
INavigationService

当然,如果你事先知道类型的话

如果要从现有字符串创建“类型”本身,则必须使用反射:

var viewType = Type.GetType("YourStoreApp.Views."+getMenu.pagePath.Substring(0, getMenu.pagePath.LastIndexOf("."));
假设
页面路径
不为空

类型字符串必须是完全限定的名称,即完整的程序集名称和类型(不带扩展名),例如“YourStoreApp.Views.Services”。但是,文件名必须完全镜像类型名才能工作

现在您可以:

Frame.Navigate(viewType);

这是我想要的答案的一半。我遇到的更大的问题是导航到LayoutWarePage的实际部分。例如,导航到pathPage参数中指定的页面。@Nathan我编辑了答案以提供进一步的详细信息。但是,从字符串创建类型时要小心,这可能容易出错,尤其是当文件名不反映类型名时。如果没有,您就必须更深入地挖掘反射,自己在程序集中发现类型,然后按名称匹配它们,然后创建具体类型。我不想将参数传递到另一个页面。我试图使用itemview的参数来决定在哪个页面上导航。因此,在上面的示例Services.xaml中,导航到pathPage中的内容。我想我弄糊涂了。对于帧导航,typef(ItemDetailsView)位。什么是ItemDetailsView,这是一个名称还是页面类型?@Nathan这只是一个例子,有一个后续内容。:)很抱歉给你带来了困惑。
itemdailsview
是一个类型,请检查
框架。导航
签名,它采用
类型
对象
。这意味着,您必须根据单击的对象中的字符串创建类型。啊,brill,这更有意义。最后一件事(对不起)。在您的“YourStoreApp.Views.Services”示例中,句点是否表示子文件夹?谢谢,这是我想要的答案的一半。我遇到的更大的问题是导航到LayoutWarePage的实际部分。例如,导航到pathPage参数中指定的页面。@Nathan我编辑了答案以提供进一步的详细信息。但是,从字符串创建类型时要小心,这可能容易出错,尤其是当文件名不反映类型名时。如果没有,您就必须更深入地挖掘反射,自己在程序集中发现类型,然后按名称匹配它们,然后创建具体类型。我不想将参数传递到另一个页面。我试图使用itemview的参数来决定在哪个页面上导航。因此,在上面的示例Services.xaml中,导航到pathPage中的内容。我想我弄糊涂了。对于帧导航,typef(ItemDetailsView)位。什么是ItemDetailsView,这是一个名称还是页面类型?@Nathan这只是一个例子,有一个后续内容。:)很抱歉给你带来了困惑。
itemdailsview
是一个类型,请检查
框架。导航
签名,它采用
类型
对象
。这意味着,您必须根据单击的对象中的字符串创建类型。啊,brill,这更有意义。最后一件事(对不起)。在您的“YourStoreApp.Views.Services”示例中,句点是否表示子文件夹?谢谢