2012-01-31 79 views
0

目前我正在爲WP7開發一個應用程序,但遇到了Listbox事件調用Selection_Change的一個小問題。問題是,當我返回到包含列表框的頁面時,selection_change事件觸發器根本沒有被改變,也沒有任何用戶輸入。列表框代碼類似於此:Windows Phone 7 Selection_Changed自動

private void lsbHistory_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    int index = lsbHistory.SelectedIndex; 
    NavigationService.Navigate(new Uri("/Views/NextPage, UriKind.Relative)); 
} 

在我瀏覽網頁,出了導航頁面的唯一方法是通過按後退按鈕或啓動按鈕的含義,它會返回一個包含列表框的頁面。當我導航選擇更改觸發器時,有時會導致我發生異常。有沒有人通過這之前?

回答

2

請考慮一直檢查它是否爲-1(默認值)。

private void lsbHistory_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    int index = lsbHistory.SelectedIndex; 
    if (index != -1) 
    { 
     NavigationService.Navigate(new Uri("/Views/NextPage, UriKind.Relative)); 
     lsbHistory.SelectedIndex = -1; // Set it to -1, to enable re-selection. 
    } 
} 

此外,你應該考慮包裹Navigate呼叫Dispatcher.BeginInvoke有更好,更流暢,網頁過渡。

+0

感謝克勞斯的迴應,事情是,當它被自動選擇時,索引被設置爲0 :(從未想過使用調度器導航thanx:D – 2012-01-31 18:21:44

+0

然後閱讀@ mikael-koskinen寫了什麼。 '清楚地選擇它與你自己的代碼 – 2012-01-31 19:50:34

+0

嘿克勞斯正在開發另一個應用程序,並遇到同樣的問題,事實證明,當我導航到另一個頁面單擊列表框項目和按下後,並分配一個新的itemssource到列表它返回到列表框的selection_changed,如果你不驗證if(index> -1),它將拋出nullreferrence異常。謝謝Claus:D – 2012-04-10 13:33:15

1

該事件將在列表填充時觸發。

你最簡單的解決方案將可能是添加一個檢查,沒有什麼觸發你的導航之前選擇:

if (lsbHistory.SelectedIndex > -1) 
{ 
    // do navigation 
} 
1

有一點要注意的是,當你瀏覽返回頁面這containt列表框,列表框仍然具有SelectedItem設置爲到用戶導航時的值。這意味着lsbHistory.SelectedIndex將獲得用戶向前導航時選擇的項目的索引。

也許你的代碼中有一些東西,當用戶導航到頁面時,推測ListBox的SelectedItem爲null?

+0

我不記得了,但我會再次看看它thanx – 2012-02-01 19:11:20