【问题标题】:Disable/enable button with DataGridTextColumn validation使用 DataGridTextColumn 验证禁用/启用按钮
【发布时间】:2013-03-12 16:58:46
【问题描述】:

我有这个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,按钮仍处于禁用状态。

【问题讨论】:

    标签: wpf validation button datagrid multidatatrigger


    【解决方案1】:

    所以我找到了解决方案:

        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;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2013-06-09
      • 1970-01-01
      • 2017-11-07
      • 2011-02-02
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多