wpf - 使用 DataGridTextColumn 验证禁用/启用按钮

标签 wpf validation button datagrid multidatatrigger

我有这个 DataGrid :

<DataGrid ItemsSource="{Binding CustomerXml}" 
     Name="customersDataGrid" AutoGenerateColumns="False" DataContext="{Binding}">
     <DataGrid.Columns>
         <DataGridTextColumn Header="Name">
             <DataGridTextColumn.Binding>
                 <Binding Path="Name" ValidatesOnDataErrors="True" 
                     UpdateSourceTrigger="PropertyChanged" NotifyOnValidationError="True">
                     <Binding.ValidationRules>
                         <local:NameValidationRule/>
                     </Binding.ValidationRules>
                 </Binding>
             </DataGridTextColumn.Binding>
         </DataGridTextColumn>

         ...

     </DataGrid.Columns>          
 </DataGrid>

我正在尝试通过 ValidationRule 禁用和启用保存按钮结果。
<Button Content="Save" Name="save" Click="save_Click">
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Setter Property="IsEnabled" Value="false" />
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition 
                             Binding="{Binding ElementName=customersDataGrid, 
                             Path=(Validation.HasError)}" Value="false" />
                    </MultiDataTrigger.Conditions>
                    <Setter Property="IsEnabled" Value="true" />
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

但是如果ValidationResult设置为 true 或 false,按钮仍处于禁用状态。

最佳答案

所以我找到了解决方案:

    int count = 0;

    private void customersDataGrid_Error(object sender, ValidationErrorEventArgs e)
    {
        if (e.Action == ValidationErrorEventAction.Added)
        {
            save.IsEnabled = false;
            count++;
        }
        if (e.Action == ValidationErrorEventAction.Removed)
        {
            count--;
            if (count == 0) save.IsEnabled = true;
        }
    }

关于wpf - 使用 DataGridTextColumn 验证禁用/启用按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15577082/

相关文章:

java - 确定fx :id of a pressed button

c# - 可以在一个 WPF 应用程序中保留不同的有界上下文 (BC) 吗?

c# - 路由事件的TargetType

c# - 如何使 Style 通用以便我可以在我的整个应用程序中使用它?

php - 如何在没有支付网关的情况下验证信用卡详细信息

html - 忽略按钮宽度属性?

c# - 在 Caliburn.Micro 约定绑定(bind)文本框中自定义字符串格式

c# - 检查是否有任何 WPF DataGrid 单元格有错误

forms - 直接在 Vaadin 7 中显示错误消息

java - 更改输入按钮以说出猜测