将菜单项和按钮绑定在一起

时间:2017-06-20 07:34:18

标签: wpf binding

我需要绑定一个menuitem和一个按钮。菜单项是“开始模拟”。按下此菜单项后,模拟开始并检查菜单项。现在我已经给了一个额外的按钮' play'在工具栏中执行完全相同的功能。按下时,模拟开始,按钮变为禁用状态。我点击后可以查看菜单项,单击一下即可禁用播放按钮,但不知道如何链接两个按钮点击。

1 个答案:

答案 0 :(得分:0)

如果您还没有将启动模拟的代码拉出到这样的单独方法中

private void StartSimulation()
{
    ... 
}

然后为您的按钮和菜单项创建一个点击事件,并从中调用您的方法。

private void button_Click(object sender, RoutedEventArgs e)
{
    StartSimulation();
    ...
}

private void menuItem_Click(object sender, RoutedEventArgs e)
{
    StartSimulation();
    ...
}

要停用按钮,请使用

button.IsEnabled = false;

所以要在模拟运行时禁用它,只需在调用StartSimulation然后调用

之前添加它
button.IsEnabled = true;

在仿真结束时重新启用它

private void button_Click(object sender, RoutedEventArgs e)
{
    button.IsEnabled = false;
    StartSimulation();
    ...
    button.IsEnabled = true;
}

注意我已经假设您的意思是wpf,因为您已将问题标记为wpf。

修改

如果您想使用命令来执行此操作,您可能希望实现类似这样的ICommand

public class RelayCommand : ICommand
{
    private Predicate<object> _canExecute;
    private Action<object> _execute;

    public RelayCommand(Action<object> execute, Predicate<object> canExecute)
    {
        this._canExecute = canExecute;
        this._execute = execute;
    }

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }

    public bool CanExecute(object parameter)
    {
        return _canExecute(parameter);
    }

    public void Execute(object parameter)
    {
        _execute(parameter);
    }
}

然后你可以像这样使用它

在您的视图模型中

public ICommand MyCommand { get; set; }

在您的视图模型的构造函数

MyCommand = new BaseCommand(_ =>
{
    // Do your stuff here
});

然后,在您的视图中,将其绑定到您要使用命令的任何位置

<Button Content="Click Me" Command="{Binding MyCommand}"/>

这个tutorial给出了一个很好的命令概述,这个question的答案给出了一个稍微不同的实现。