2013-03-22 2 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 установлено значение истина или ложь, кнопка все еще отключен.

ответ

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