使用NavigationCommands.Refresh扩展WPF Toolkit DataGridControl

时间:2016-11-03 17:11:10

标签: c# wpf wpf-extended-toolkit

在我的WPF应用程序中,我想将用户F5笔划作为刷新处理。为了实现这一点,我决定使用NavigationCommands.Refresh命令。

在UI中,我使用Extended WPF Toolkit中的DataGridControl。问题:只要焦点位于数据网格内,就不会触发刷新命令处理程序。

这可以通过非常小的样本来证明:

<Window x:Class="WpfTests.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:xd="http://schemas.xceed.com/wpf/xaml/datagrid">
    <Window.CommandBindings>
        <CommandBinding Command="NavigationCommands.Refresh" Executed="CommandBinding_Executed" CanExecute="CommandBinding_CanExecute"/>
    </Window.CommandBindings>
    <StackPanel>
        <TextBox Text="Click me to get the focus out of DataGridControl"/>
        <xd:DataGridControl/>
    </StackPanel>
</Window>

没有什么花哨的代码落后,我只是用它来在处理程序中放置断点:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
    {
        e.Handled = true;
    }

    private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
    {
        e.CanExecute = true;
        e.Handled = true;
    }
}

重现:

  • 启动应用程序,按F5 - 执行处理程序
  • 点击DataGridControl区域,按F5 - 处理程序未执行
  • 点击文本框,按F5 - 执行处理程序

所以问题是,当用户按下F5而焦点在DataGridControl范围内时,如何确保执行刷新处理程序?

1 个答案:

答案 0 :(得分:0)

好的,我终于偶然发现了解决方案。

https://xceed.com/forums/topic/what-is-the-function-key-F5-in-datagrid-for/

DataGridControl.IsRefreshCommandEnabled属性设置为False会阻止datagridcontrol使用F5键作为其自己的内部逻辑。然后按预期调用处理程序。