Hi Ho bisogno di validare alcune delle caselle di testo nella mia applicazione. Ho decied usare regola di convalida "DataErrorValidationRule". Ecco perché nella mia classe ho implementato l'interfaccia IDataErrorInfo e ho scritto le funzioni di aproperia. Nel mio codice XAML ho aggiunto attacchi e le regole di convalida per le caselle di testoWPF - convalida - come mostrare i suggerimenti e disattivare "run" pulsante
<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 liquidazione di questo campo testo è OK - voglio dire appare cornice rossa su testo se i dati è sbagliato. Tuttavia ciò che devo fare è quello di mostrare tooltip su quel testo, ma ciò che è più importante devo disabilitare il pulsante "Esegui" se tutte le caselle di testo hanno dati sbagliati. Qual è il modo migliore per fare ??
EDIT primo problema è stato risolto, ma ho un altro. Devo usare MultiBindings per convalidare il mio pulsante. Così ho fatto sth così
<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>
mio convertitore sembra che
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
}
Tuttavia ottengo InvalidCastException in questo convertitore. Che cast è appropriato in quel caso? Io parlo come se HasError fosse un tipo bool, quindi dovrei scritturare per bool.
Che cosa vuol dire "tipo"? Sostituirlo con "if (values.Cast(). Any (val => val))" –
vorrtex