2013-02-12 33 views
0

我有一個簡單的列表,綁定到一個gridview控件,在itemview的點擊事件我想導航到頁面。基於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中提取點擊事件數據,我有點不確定如何做到這一點。

回答

1

如果我正確理解你的問題,即你想獲得「點擊」項目,那麼它應該是相當容易:

var getMenu = (GetMenu)e.ClickedItem; 

現在你有項目,你可以使用屬性裏面的導航參數。

這是你的想法?

[編輯]

導航本身也相當簡單。如果您處於代碼隱藏狀態,您必須:

Frame.Navigate(typeof(YourViewForTheItem), parameters); 

例如,

Frame.Navigate(typeof(ItemDetailsView), getMenu); 

parametersobject,所以你必須適當地投它在OnNavigatedTo目標視圖。

如果您使用的是任何類型的MVVM框架,也有相應的服務,例如, Caliburn.Micro有INavigationService

這當然如果你事先知道類型的話。

如果你想創建你有一個字符串「類型」本身,你將不得不使用反射:

var viewType = Type.GetType("YourStoreApp.Views."+getMenu.pagePath.Substring(0, getMenu.pagePath.LastIndexOf(".")); 

假設pagePath不爲空。

類型字符串必須是完全限定名稱,即完整程序集名稱和類型(不帶擴展名),例如「YourStoreApp.Views.Services」。文件名必須正確地鏡像類型名稱才能使其正常工作。

現在,您可以:

Frame.Navigate(viewType); 
+0

那一半我一直在尋找的答案。我遇到的更大問題是導航到layoutawarepage的實際部分。例如,導航到pathPage參數中指定的頁面。 – Nathan 2013-02-12 19:06:58

+0

@Nathan我編輯了答案以提供更多細節。當從字符串創建類型時要小心,但它可能容易出錯,尤其是如果您的文件名不能反映類型名稱。如果他們不這樣做,則必須深入研究反射,並在組件中發現自己的類型,然後按名稱匹配它們,然後創建具體類型。 – 2013-02-12 19:18:26

+0

我不想將參數傳遞給另一個頁面。我試圖使用itemview的參數來決定哪個頁面也可以導航。因此,導航到上面的示例Services.xaml中pathPage中的任何內容。我覺得我很困惑。對於框架導航,typef(ItemDetailsView)位。什麼是ItemDetailsView,是一個名稱或類型的頁面? – Nathan 2013-02-12 19:19:37

相關問題