Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何保持按钮处于禁用状态,直到所有字段都已填充_C#_.net_Wpf - Fatal编程技术网

C# 如何保持按钮处于禁用状态,直到所有字段都已填充

C# 如何保持按钮处于禁用状态,直到所有字段都已填充,c#,.net,wpf,C#,.net,Wpf,我如何经常检查多个字段是否有输入,一旦所有字段都有输入,如何启用按钮?或者是像 if( textbox1.text && textbox2.text && textbox3.text && ...){button1.isEnabled = true;} 是否有类似unity的更新方法来检查更改?您必须使用命令模式,然后它应该是这样的-- 你的命令类-- 在构造函数中-- 您的命令处理程序-- 您可以执行处理程序-- 您可以将所有文本框链接到相同的

我如何经常检查多个字段是否有输入,一旦所有字段都有输入,如何启用按钮?或者是像

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

是否有类似unity的更新方法来检查更改?

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

你的命令类--

在构造函数中--

您的命令处理程序--

您可以执行处理程序--


您可以将所有文本框链接到相同的
TextChanged
事件,然后对它们进行评估,以查看是否所有文本框都已完成

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


private void EnableButton()
{
    button1.Enabled = !Controls.OfType<TextBox>().Any(x => string.IsNullOrEmpty(x.Text));
}
private void textboxs\u TextChanged(对象发送者,事件参数e)
{
EnableButton();
}
私有void EnableButton()
{
button1.Enabled=!Controls.OfType().Any(x=>string.IsNullOrEmpty(x.Text));
}

只需绑定到文本框的更改事件,并触发逻辑检查其中的条件,wpf还引入了许多更复杂的解决方案,我想您需要了解它的工作方式哦!非常感谢。对于这些更好的解决方案有什么好的参考吗?您打算遵循命令模式吗?我建议你一定要这样,这样就容易了!或者,在表单加载时在文本框上列出一次
,然后在运行时,使用
LINQ
命令进行检查是最好的方法(我会为此使用库:)CanClick是正确的,但现在,当文本框或文本框2发生更改时,您应该触发CanExecuteChanged。很好地说明了简单的事情会变得多么复杂。。。我想说,除非涉及到真正复杂的逻辑,否则反模式不是提供解决方案,而是指导正确的方法,你会像OP那样做吗?如果你认为命令模式很复杂,那么。。。。祝你好运然后呢?我是一个糟糕的程序员?还是愚蠢?对于这样一个简单的例子来说,这简直是小题大做。证明你可以编程很酷,但如果你真的要实现一些易于使用和理解的东西,这不是最好的。特别是若你们的水平是在我对这个问题的评论中提出上述问题,我只是在提倡最佳实践,这在现实世界中绝非过火。不是吗?
<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;
    }
private void textBoxes_TextChanged(object sender, EventArgs e)
{
    EnableButton();
}


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