0

我有一个 prism 委托命令设置,用于刷新我的应用程序中的数据。我也有使用委托命令关闭和关于窗口的设置快捷方式。

使用 F5 也不会触发视图模型中的刷新。如果我使用 Alt+F4,应用程序将关闭。但它不执行视图模型中的 CloseApplication 方法。以下代码中缺少什么来使用手势快捷方式执行 ViewModel?

用户控制:

<UserControl.InputBindings>
    <KeyBinding Gesture="ALT+F4" Command="{Binding CloseCommand}" />
    <KeyBinding Gesture="F5" Command="{Binding RefreshCommand}" />
</UserControl.InputBindings>
<DockPanel>
    <Menu DockPanel.Dock="Top">
        <MenuItem Header="_File">
            <MenuItem Header="E_xit" Command="{Binding CloseCommand}" InputGestureText="Alt+F4" />
            <MenuItem Header="Refresh" Command="{Binding RefreshCommand}" InputGestureText="F5" />
        </MenuItem>
        <MenuItem Header="_Help">
            <MenuItem Header="_About" Command="{Binding AboutCommand}" />
        </MenuItem>
    </Menu>
    <ToolBar ToolBarTray.IsLocked="True">
        <Button Content="Home" MinHeight="50" MinWidth="80" VerticalContentAlignment="Bottom" />
        <Button Content="Page 1" MinHeight="50" MinWidth="80" VerticalContentAlignment="Bottom" />
        <Button Content="Page 2" MinHeight="50" MinWidth="80" VerticalContentAlignment="Bottom" />
    </ToolBar>
</DockPanel>

UserControl 的 ViewModel

public class TopMenuViewModel:NotificationObject
    {
        private DelegateCommand _closeCommand;
        private DelegateCommand _aboutCommand;
        private DelegateCommand _refreshCommand;

        public TopMenuViewModel()
        {
            _closeCommand = new DelegateCommand(CloseApplication);
            _aboutCommand = new DelegateCommand(ShowAboutWindow);
            _refreshCommand = new DelegateCommand(RefreshApplication);
        }

        private void ShowAboutWindow()
        {
            Console.WriteLine("Show about window");
        }

        private void CloseApplication()
        {
            Application.Current.Shutdown();
        }

        private void RefreshApplication()
        {
            Console.WriteLine("Refreshing..");
        }

        public ICommand CloseCommand 
        {
            get { return _closeCommand; }
        }

        public ICommand AboutCommand
        {
            get { return _aboutCommand; }
        }

        public ICommand RefreshCommand
        {
            get { return _refreshCommand; }
        }


    }

如果我使用鼠标单击菜单或使用 Alt+x 或 Alt+A,则会调用视图模型方法。但没有使用我放入的 KeyBinding。感谢您的帮助。

4

0 回答 0