如何禁用按钮,直到所有字段都已填满

时间:2016-01-18 08:47:23

标签: c# .net wpf

我如何不断检查多个字段是否有输入,并且一旦所有字段都有输入启用按钮?或者就像

一样简单
if( textbox1.text && textbox2.text && textbox3.text && ...){button1.isEnabled = true;}

是否有一个像Unity一样的更新方法来检查更改?

2 个答案:

答案 0 :(得分:2)

您可以将所有文本框链接到同一个TextChanged事件,然后评估它们以查看是否所有文本框都已完成。

private void textBoxes_TextChanged(object sender, EventArgs e)
{
    EnableButton();
}


private void EnableButton()
{
    button1.Enabled = !Controls.OfType<TextBox>().Any(x => string.IsNullOrEmpty(x.Text));
}

答案 1 :(得分:1)

你必须使用命令模式,它应该是这样的 -

您的命令类 -

 public class RelayCommand : ICommand
    {
        private Action<object> _execute;
        private Func<object, bool> _canExecute;

        public RelayCommand(Action<object> execute, Func<object,bool> canExecute)
        {
            _execute = execute;
            _canExecute = canExecute;
        }

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

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

        public event EventHandler CanExecuteChanged
        {
            add
            {
                if (_canExecute != null)
                {
                    CommandManager.RequerySuggested += value;
                }
            }
            remove
            {
                if (_canExecute != null)
                {
                    CommandManager.RequerySuggested -= value;
                }
            }
        }
    }

您的按钮代码 -

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

您的命令属性 -

public ICommand EnabledCommand { get; set; }

在你的构造函数中 -

ButtonCommand = new RelayCommand(ButtonCommandHandler, CanClick);

您的命令处理程序 -

private void ButtonCommandHandler(object obj)
    {
        // Do what ever you wanna
    }

你可以执行处理程序 -

 private bool CanClick(object arg)
    {
        return textbox1.Text.Trim().Length > 0 && textbox2.Text.Trim().Length > 0;
    }