2013-03-22 58 views
4

按钮我有这个DataGrid禁用/启用与DataGridTextColumn验证

<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,按钮仍然被禁用。

回答

3

于是我找到解决办法:

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