繁体   English   中英

WPF:如果我的窗口有任何验证错误,如何禁用一个按钮?

[英]WPF: How can I disable one button if my window has any validation error?

我在窗口中有一些(> 20)控件,每个控件都绑定到ViewModel的属性。

ViewModel实现IDataErrorInfo ,以进行一些验证,并且运行良好。

现在,我在窗口中添加一个类似“提交”的按钮。 如果任何控件有验证错误,我想禁用该按钮。

尽管我可以使用DataTrigger来完成以下操作:

<Button Content="Commit">
    <Button.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=control1, Path=(Validation.HasError)}" Value="True">
                    <Setter Property="Button.IsEnabled" Value="False" />
                </DataTrigger>
                <DataTrigger Binding="{Binding ElementName=control2, Path=(Validation.HasError)}" Value="True">
                    <Setter Property="Button.IsEnabled" Value="False" />
                </DataTrigger>
                <!-- DataTriggers for control3, 4, 5... -->
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>   

那将是一个很长的XAML代码,因为我在此窗口中有20多个控件,所以我想知道是否有更好的解决方案?

也许您应该在ViewModel中创建一个命令。 像这样:

class ViewModel
{
    public ICommand CommitCommand{ get; private set; }

    public ViewModel()
    {
        CommitCommand = new RelayCommand(Commit, CanCommit);
    }

    private void Commit(object parameter)
    {
        // button click handler
    }

    private bool CanCommit(object parameter)
    {
        // check: view model has errors
    }
}

实现ICommand接口,您可以在这里获得: Wpf教程

XAML代码:

<Button Command={Binding CommitCommand}/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM