Hola Necesito validar algunos cuadros de texto en mi aplicación. Decidí usar la regla de validación "DataErrorValidationRule". Es por eso que en mi clase implementé la interfaz IDataErrorInfo y escribí las funciones aproperiate. En mi código XAML añadí fijaciones y reglas de validación a cuadros de textowpf - validación - cómo mostrar información sobre herramientas y desactivar el botón "ejecutar"
<TextBox x:Name="txtName" Grid.Column="3" Grid.Row="1" TextAlignment="Center" >
<TextBox.Text>
<Binding Path="Name" >
<Binding.ValidationRules>
<DataErrorValidationRule></DataErrorValidationRule>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
La validación de este cuadro de texto está bien - me refiero a que aparezca un marco rojo en la caja de texto si los datos es erróneo. Sin embargo, lo que tengo que hacer es mostrar información sobre herramientas en ese cuadro de texto, pero lo que es más importante, tengo que deshabilitar el botón "Ejecutar" si algún cuadro de texto tiene datos incorrectos. ¿Cuál es la mejor manera de hacerlo?
EDIT Primer problema fue resuelto, pero tengo otro. Necesito usar MultiBindings para validar mi Botón. Así que hice algo así
<Button x:Name="btnArrange" Grid.Column="0" Content="Rozmieść" Click="btnArrange_Click" >
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Value="False">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource BindingConverter}">
<Binding ElementName="txtName" Path="Validation.HasError" />
<Binding ElementName="txtSurname" Path="Validation.HasError"/>
<Binding ElementName="txtAddress" Path="Validation.HasError"/>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
Mi convertidor parece que
public class Converters : IMultiValueConverter
{
#region IMultiValueConverter Members
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if(values !=null && values.Length > 0)
{
if (values.Cast<type>().Count(val => val) > 0)
return false;
return true;
}
return false;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
#endregion
}
Sin embargo me sale InvalidCastException en este convertidor. ¿Cuál es el modelo adecuado en ese caso? Creo que HasError es un bool, así que debería lanzar al bool.
¿Qué significa "tipo"? Reemplazarlo por "if (values.Cast() .Any (val => val))" –
vorrtex