C# 根据itemview单击的项目导航到页面
我有一个绑定到gridview控件的简单列表,在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
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”示例中,句点是否表示子文件夹?谢谢