代码之家  ›  专栏  ›  技术社区  ›  UserEsp

如何使用WPF(后端)在按钮控件中添加命令[已关闭]

  •  0
  • UserEsp  · 技术社区  · 10 年前

    如何在WPF中使用后端代码向按钮控件添加命令?

    1 回复  |  直到 10 年前
        1
  •  2
  •   Anton Danylov    10 年前

    在代码后面添加命令的简单示例

    class SomeCommand : ICommand
    {
        public event EventHandler CanExecuteChanged;
    
        public bool CanExecute(object parameter)
        {
            return true;
        }
    
        public void Execute(object parameter)
        {
            MessageBox.Show("From command");
        }
    }
    

    在InitializeComponent()之后的构造函数中;

            var btnCompare = new Button();
            btnCompare.Content = "Compare";
            btnCompare.Command = new SomeCommand();
    
            grid.Children.Add(btnCompare);
    

    更新

    正如我从您的评论中所理解的,您希望向命令传递一个参数,这将更改ICommand的返回值。CanExecute方法基于某些条件。可以通过将委托作为参数传递,并在命令中实现CanExecuteChanged事件作为CommandManager的包装来实现。RequerySuggested事件。命令应激发CanExecuteChanged以通知框架CanExecutive方法的返回值已更改。

    通常是CommandManager。每次用户与应用程序的界面交互时,RequerySuggested都会触发,对于其他情况,您可以调用CommandManager。InvalidateRequerySuggested()静态方法。 下面是说明该方法的代码。

    XAML公司

    <Grid Name="grid">
        <Grid.RowDefinitions>
            <RowDefinition Height="50"/>
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <CheckBox Content="Bool value is true" Click="checkBoxBool_Click" IsChecked="True"/>
    </Grid>
    

    C#

    class SomeCommand : ICommand
    {
        public event EventHandler CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }
    
        public bool CanExecute(object parameter)
        {
            Func<bool> isTrue = (Func<bool>)parameter;
            return isTrue != null && isTrue();
        }
    
        public void Execute(object parameter)
        {
            MessageBox.Show("From command");
        }
    }
    

    ...

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
    
            var btnCompare = new Button();
            btnCompare.Content = "Compare";
    
            btnCompare.CommandParameter = new Func<bool> (() => GetBoolValue());
            btnCompare.Command = new SomeCommand();
    
            btnCompare.SetValue(Grid.RowProperty, 1);
    
            grid.Children.Add(btnCompare);
        }
    
        private bool _boolValue = true;
        private bool GetBoolValue()
        {
            return _boolValue;
        }
    
        private void checkBoxBool_Click(object sender, RoutedEventArgs e)
        {
            _boolValue = (e.Source as CheckBox).IsChecked == true;
    
        }
    }
    
    推荐文章