2014-10-07 92 views
1

我正在使用windows store 8.1應用程序,我在MainPage.xaml中使用List在MainPage.xaml中添加了網格如何根據第一頁上點擊的網格加載導航頁面(第2頁)上的UI

MainPage.xaml中

<GridView Margin="20" x:Name="main" SelectionMode="None" IsItemClickEnabled="True" ItemClick="main_ItemClick"> 
    <GridView.ItemTemplate> 
     <DataTemplate> 
      <Grid Background="Red" Width="250" Height="200"> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="150"/> 
        <RowDefinition Height="2*"/> 
        <RowDefinition Height="*"/> 
       </Grid.RowDefinitions> 
       <Image Grid.Row="0" Stretch="UniformToFill" Source="{Binding ImageLocation}"/> 
       <TextBlock Text="{Binding Title}" Grid.Row="1" FontSize="28" /> 
       <TextBlock Text="{Binding SubTitle}" Grid.Row="2" FontSize="16" /> 

      </Grid> 
     </DataTemplate> 
    </GridView.ItemTemplate> 
</GridView> 

MainPage.xaml.cs中

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    List<data> myList = new List<data>(); 
    myList.Add(new data() 
     { 
      ImageLocation = @"Assets/network.png", 
      iName = "NetWork", 
      SubTitle ="Network", 
      Title = "Network" 
     }); 
    myList.Add(new data() 
    { 
     ImageLocation = @"Assets/fb.png", 
     iName = "Facebook", 
     SubTitle = "Facebook", 
     Title = "Facebook" 
    }); 


    main.ItemsSource = myList; 
} 

private void main_ItemClick(object sender, ItemClickEventArgs e) 
{ 
    Frame.Navigate(typeof(ListView)); 
} 

我想,當有人點擊任何的網格,在ListView的頁面顯示一個TextBlock中被點選其中的MainPage格。

+0

你不應該導航到'typeof(ListView)'。如果有的話,你應該明確地重命名該頁面,因爲它與'ListView'類相沖突。至於你能做什麼,Frame.Navigate可以傳入一個參數。你的ItemClickEventArgs有一個ClickedItem屬性,告訴你哪個項目被點擊(如哪個網格)。您可以獲取該值並將其傳遞給導航參數。然後你可以在OnNavigatedTo方法的'ListView'中檢索它。或者你可以使用ViewModel在它們之間傳遞數據。 – 2014-10-07 18:13:15

回答

1

這將是不顯示你的代碼解釋是一個挑戰,但在這裏不用...

希望你已經創建了兩個頁面爲止。包含GridView的MainPage.xaml。還有一個DetailsPage.xaml,其佈局將顯示一個項目。

在MainPage.xaml的代碼隱藏中,就像您在示例代碼中一樣,您可以處理GridView的ItemCLick,但是您希望獲取單擊的項目的Id,而不是項目本身。原因是你想傳遞一個字符串,而不是一個複雜的對象。

在您的處理程序中,事件args(e)具有名爲ClickedItem的屬性,該屬性將成爲您綁定到的項目。讓我們假裝它是一個你綁定到的UserObject。在你的處理器中做這樣的事情:

var user = e.ClickedItem as UserObject; 
this.Frame.Navigate(typeof(DetailPage), user.Id.ToString()); 

那麼,這裏發生了什麼?幾乎與之前的代碼相同。除了您正在導航到第二頁的類型而不是其他任何內容。您也正在傳入(Navigate方法中的第二個參數)您要顯示的確切記錄。

然後在您的DetailPage.xaml代碼隱藏內部重寫OnNavigatedTo方法。此方法是當Navigation框架指向頁面時調用的方法。它有一個NavigationPararmeter傳遞給它,您可以使用它來提取您傳遞的密鑰。

我認爲它實際上是args.Parameter你想使用。您可以將其解析爲一個整數,並用它來獲取應用程序中內存中的某個記錄。

var id = int.Parse(args.Parameter); 
var user = YourFactory.GetUser(id); 

我從這個轉變的原因是你怎麼做,以「我認爲這是如何工作的」,是因爲雖然基本框架工作就是這樣,大多數開發商不這樣使用它。大多數開發人員實現了Prism.StoreApps,它不僅引入了輕量級MVVM框架,而且還引入了一個複雜的NavigationService,它允許您直接將參數注入到自動關聯的視圖模型中。

但基於你的問題的簡單性,儘量不要留意最後一點。我使用收件箱框架解釋了基本工作流程。它工作得很好,它會完成工作。當你準備寫一個更高級的實現,你可以調查Prism.StoreApps

更多信息:http://msdn.microsoft.com/en-us/library/windows/apps/xx130655.aspx

祝您好運!

相關問題