2014-03-05 60 views
1

我正在創建一個應用程序,其中我通過Web服務從數據庫獲取數據,並在mainpage.xaml的列表框中顯示它(有關不同事件的數據,例如EventTitle ,日期等)此刻我已經設置好了,當選擇列表框中的項目時,應用程序導航到「EventDetail」頁面,該頁面只顯示列表中選定的數據。Windows Phone 7 - 從列表框中傳遞/傳輸選定的數據

我需要幫助的是將此用戶選擇的數據帶到要使用的導航頁面。我正在努力以最簡單的方式解決問題;如何將用戶選擇的列表框項目傳送到定義的頁面,以更清晰的方式顯示並使用該數據。

最好我想在導航頁面內的單獨文本塊中顯示每個文本塊/單元格(EventTitle,Date等),以便它們可以適當地佈局,但只有選定字段數據的列表框才能完成這項工作。

下面是相關XAML代碼:

<ListBox Height="496" HorizontalAlignment="Left" Margin="-4,155,0,0" Name="FirstListBox2" VerticalAlignment="Top" Width="460" SelectionChanged="FirstListBox2_SelectionChanged"> 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal" Height="132"> 

          <StackPanel Width="370"> 
           <TextBlock Text="{Binding EventID}" Foreground="#FFC8AB14" FontSize="24" /> 
           <TextBlock Text="{Binding EventList}" TextWrapping="Wrap" FontSize="36" /> 
           <TextBlock Text="{Binding Date}" TextWrapping="Wrap" FontSize="24" /> 
          </StackPanel> 
         </StackPanel> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

下面是相關的C#代碼:

 private void FirstListBox2_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     EventServiceReference1.Event myEvent = (EventServiceReference1.Event)FirstListBox2.SelectedItem; 
     NavigationService.Navigate(new Uri("/EventPageTemp.xaml", UriKind.Relative)); 
    } 

請如果你能幫助我這個問題,我將非常感謝。

回答

1

使用查詢字符串參數發送所選值:

EventServiceReference1.Event myEvent = (EventServiceReference1.Event)FirstListBox2.SelectedItem; 
int eventId = myEvent.EventID; 
string url = string.Format("/EventPageTemp.xaml?eventId={0}", eventId); 
NavigationService.Navigate(new Uri(url, UriKind.Relative)); 

您可以使用pick up the event parameter on the target pageNavigationContext.QueryString。然後,只需設置你的目標頁面的數據上下文的需要:

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    int eventId; 
    string eventIdStr; 
    if (NavigationContext.QueryString.TryGetValue("eventId", out eventIdStr) && int.TryParse(eventIdStr, out eventId)) 
    { 
     // load event data, and set data context 
    } 
} 

編輯

我猜你可能需要暫時保存事件數據,而不是重新加載它的服務目標頁面。如果是這樣,您可以使用獨立存儲來保存事件數據。所以導航之前,使用適當的鍵添加數據:

IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; 
settings["event"] = myEvent; 
settings["eventId"] = eventId; 

然後把它撿起來以同樣的方式:

IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; 
if (settings.ContainsKey("event") && (int)settings["eventId"] == eventId) 
{ 
    var myEvent = (EventServiceReference1.Event)settings["event"]; 
} 

編輯#2

由於AndreiC指出,寫入獨立存儲會佔用設備上的空間,因此您應該刪除不再需要的任何項目。

+0

謝謝,我會試一試並回復你:) – Ibrahim

+0

謝謝是的,這種方法對我來說非常合適。這是一種簡單易行的方法,也非常有效。我感謝您的幫助。謝謝。 – Ibrahim

+0

@mcgarnagle這也可以,但是看不到在應用程序設置中選擇應用程序存儲空間中保留的選擇點...可以說,用戶在10個事件中使用應用程序期間點擊,你在手機上存儲10個事件。對我來說,這有點浪費空間,除非你以某種方式清除這個已用空間......將從Web服務收到的事件的整個列表存儲在本地存儲中是一個不同的故事,因爲它可以用在下一次啓動以顯示在事件列表從服務器更新之前的事件 – AndreiC

1

一個簡單的方法是將類型事件的公共靜態屬性添加到您的App類(命名爲SelectedEvent),這樣當用戶從列表框中選擇一個事件,你會設置:

App.SelectedEvent = myevent; 

然後在EventPageTemp.xaml.cs你只需設置頁面的DataContext你App.SelectedEvent:

DataContext = App.SelectedEvent; 

在EventPageTemp的XAML頁面,你會僅僅是接口綁定到你的事件對象的屬性。

+0

謝謝,我會試試看。 :) – Ibrahim

相關問題