2011-07-21 33 views
1

對於某人來說,這看起來像是一個簡單的答案,所以我給了這個鏡頭,因爲我試圖解決這個問題已經翻了一番。將RSS綁定數據傳遞給另一個頁面,windows phone 7

我將RSS信息傳遞到帶有綁定數據的listboxitemtemplate。每個listboxitem都有一個圖片網址。我希望用戶能夠點擊listboxitem,將圖像URL傳遞到新頁面,並打開顯示圖像的頁面。

唯一的問題是?我無法得到這個工作。

這是我到目前爲止有:

第1頁XAML:

 <ListBox x:Name="listbox" Grid.Row="1" SelectionChanged="listbox_SelectionChanged"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto" /> 
         </Grid.RowDefinitions> 
         <Image Grid.Row="0" HorizontalAlignment="Left" Height="60" Width="60" Source="{Binding Url}"/> 

        </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

第1頁CS

private void listbox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     var URLname = ""; 

     URLname = (sender as RssItem).Url.ToString(); 

    NavigationService.Navigate(new Uri("/SubmittedPic.xaml?image=" + URLname, UriKind.Relative)); 
    this.listbox.SelectedItem = (sender as ListBoxItem); 

    } 

的代碼打破URLname = (sender as RssItem).Url.ToString();,它是說,一個空引用異常未處理。

對此的任何幫助將不勝感激。

回答

1

從你的代碼,我想你混淆ListBoxItem和綁定對象RssItem。如果綁定正確,則RssItem將是ListBoxItem.DataContext中包含的對象的類型。

要檢查此問題,請使用調試器來查看sender實際是什麼類型和值。

下面的代碼適用於我的情況:它需要發件人並獲取其DataContext,然後將其轉換爲我的綁定對象的類型。

FrameworkElement fe = (FrameworkElement)sender; 
RssItem rssItem = (RssItem) fe.DataContext; 
string url = rssItem.URL.ToString(); 

而且,請注意,以這種方式使用的SelectionChanged可能引入觸摸選擇,當微妙的錯誤回導航到該列表從您的詳細信息頁面。爲了避免這些,您應該在列表項上使用點按事件。

0

SelectionChanged事件使用標準EventHandler圖案,其所有UI框架事件符合其中object類型的第一個參數sender,是該事件的源UI元素。在這種情況下,由於事件是由ListBox發出的,發件人將會引用您的ListBox

要獲得點擊的項目,您需要檢查ListBox.SelectedItem屬性。這應該是您的RssItem

值得注意的是,ListBox不是最好的導航控件,首先它有點重量級(它有不必要的UI元素支持選擇),其次,你必須清除選擇,以便相同的元素可以當您返回到原始列表頁面時單擊。

你可以在這裏找到專用的導航控制:

http://www.scottlogic.co.uk/blog/colin/2011/04/a-fast-loading-windows-phone-7-navigationlist-control/

相關問題