2015-09-10 109 views
1

我有一個透視控件,我使用ItemSource屬性傳遞數據。我也在使用數據模板來填充數據透視表項。如何強制關注Windows 10應用程序(UWP)的XAML ListView?

數據模板裏面有一個listview。

<DataTemplate ..... > 

<ListView ....></ListView> 

</DataTemplate> 

我想將鍵盤事件附加到頁面中的ListView。如使用Home鍵滾動到頂部並使用結束鍵滾動到底部。

由於ListView在DataTemplate中,因此無法在編譯時連接Keyboard事件。採取

途徑來克服這一:

1)在XAML控制使用的KeyDown屬性

Result: Too much delay for the event to trigger 

2)使用的VisualTree

Result: Traversing creates lot of overhead. 

3)使用的ListView加載事件

Result: Called only once 

到目前爲止採取的最佳解決方案:

1)爲ListView的GotFocus屬性附加鍵盤事件。

但我想在頁面加載時強調Listview。另外,當我更改數據透視表項時,它應該自動強制關注新的ListView。

回答

1

您可以在DataTemplate中共享ListViews的事件處理程序。然後使用事件的發件人來讓ListView實例觸發事件。

從發件人,你可以做你想做的。例如,如果我分享LoadedEvent,我想嘗試這樣的事:

private void ListView_OnLoaded(object sender, RoutedEventArgs e) 
    { 
     var lv = sender as ListView; 

     if(lv != null) 
      lv.SelectedIndex = 0; 
    } 

注意,這可能無法正常工作,是的,所以一定要徹底地測試它,它會爲你的工作需要。這是一個快速的方法。

如果你堅持嚴格的MVVM模式,另一個選擇是使用屬性(依賴或類似)並使用OneTime x:綁定到ListView的SelectedIndex。我還沒有測試過這種方法,但這個想法應該可以像所有ListView一樣綁定到相同的屬性。

+0

謝謝蘭斯:)我的第三種方法實際上是使用ListView,它沒有工作。然而,我嘗試使用util:FocusHelper.IsFocus =「{x:綁定IsFocused,模式= OneWay}」,並按預期工作。 –

相關問題