Microsoft我認爲這可能是一個錯誤。讓ListView GridView顯示一條記錄。當ItemsSource刷新時,GridView會丟失SelectedIndex值
自然,向下箭頭鍵瀏覽ListViewItems。這是我期望的行爲。在XAML中,ItemsSource和SelectedIndex被綁定。我想要的行爲是右箭頭鍵和左箭頭鍵導航到下一個和先前的記錄。
我實現這個的方式是處理ListView PreviewKeyDown事件。我遇到的問題是當ItemSource刷新時SelectedIndex重置爲-1,我希望它保留在舊的SelectedIndex上。所以我必須手動重置SelectedIndex,如下所示。
這是我的問題:之後和直接後左箭頭或右箭頭鍵向上和向下鍵不傳遞正確的SelectedIndex值。
例如SelectedIndex = 4,然後向右箭頭,然後向下鍵傳遞給SelectedIndex的值爲0,傳遞的值應該是4. ListView可視化在SelectedIndex 4上,所以它就像它知道SelectedIndex是4但它也不知道。如果我不更改ItemsSource,則向上和向下箭頭鍵可以正常工作。我嘗試了KeyDown和KeyUp事件,但在上述失敗情況下,這些事件根本不會觸發。
WPF 4.0 Visual Studio 2010中
private void lvCurDocFields_PreviewKeyDown(object sender, KeyEventArgs e)
{
Debug.WriteLine("lvCurDocFields_PreviewKeyDown " + e.Key.ToString());
e.Handled = false;
Int32 lastIndex;
switch (e.Key) // e.KeyCode
{
case Key.Right:
lastIndex = lvCurDocFields.SelectedIndex;
App.StaticGabeLib.Search.SelectedDocIndex++;
if (lvCurDocFields.SelectedIndex != lastIndex)
{
lvCurDocFields.SelectedIndex = lastIndex;
}
e.Handled = true;
break;
case Key.Left:
lastIndex = lvCurDocFields.SelectedIndex;
App.StaticGabeLib.Search.SelectedDocIndex--;
if (lvCurDocFields.SelectedIndex != lastIndex)
{
lvCurDocFields.SelectedIndex = lastIndex;
}
e.Handled = true;
break;
}
base.OnPreviewKeyDown(e);
}
我不認爲這將工作,因爲從技術上說它不是相同的SelectedItem但它是相同的SelectedIndex。新記錄具有相同的條目(ListItems),但列表項的新值 - 我只是移動一個集合。基本上我認爲我正在做你所建議的,但使用SelectedIndex。我錯過了什麼?請注意,當我導航到新記錄時,它會給出正確的答案。在新記錄後直接通過向上或向下箭頭鍵移動到新的ListItem。 – Paparazzi