2015-09-10 82 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}”,并按预期工作。 –

相关问题