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

时间:2014-11-14 06:59:44

标签: c# wpf validation xaml

我在窗口中有一些(> 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多个控件,所以我想知道是否有更好的解决方案?

1 个答案:

答案 0 :(得分:3)

也许你应该在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 Tutorial

Xaml代码:

<Button Command={Binding CommitCommand}/>