He adoptado lo que parece ser la forma estándar de validar cuadros de texto en WPF utilizando la interfaz IDataErrorInfo y los estilos que se muestran a continuación. Sin embargo, ¿cómo puedo desactivar el botón Guardar cuando la página no es válida? ¿Esto se hace de alguna manera a través de los factores desencadenantes?Deshabilitar el botón Guardar en WPF si la validación falla
Default Public ReadOnly Property Item(ByVal propertyName As String) As String Implements IDataErrorInfo.Item
Get
Dim valid As Boolean = True
If propertyName = "IncidentCategory" Then
valid = True
If Len(IncidentCategory) = 0 Then
valid = False
End If
If Not valid Then
Return "Incident category is required"
End If
End If
Return Nothing
End Get
End Property
<Style TargetType="{x:Type TextBox}">
<Setter Property="Margin" Value="3" />
<Setter Property="Height" Value="23" />
<Setter Property="HorizontalAlignment" Value="Left" />
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<Border BorderBrush="Red" BorderThickness="1">
<AdornedElementPlaceholder Name="MyAdorner" />
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
</Trigger>
</Style.Triggers>
</Style>
funciona muy bien muchas gracias. Otra cosa sin embargo. Puedo verificar los controles individuales con el siguiente código If Validation.GetHasError (myTextbox) Then e.CanExecute = False ¿Hay alguna manera de verificar la validez de todos los controles en lugar de verificarlos individualmente? – Mitch
Lo edité para incluir algunas ideas sobre esto. –
+1 para el uso del comando sugerido. Los comandos son los que hacen que WPF comience a hacer clic genuinamente en mí. –