Hi Tôi cần xác thực một số hộp văn bản trong ứng dụng của mình. Tôi đã từ chối sử dụng quy tắc xác thực "DataErrorValidationRule". Đó là lý do tại sao trong lớp của tôi, tôi đã triển khai giao diện IDataErrorInfo và đã viết các hàm aproperiate. Trong mã xaml của tôi, tôi đã thêm các quy tắc ràng buộc và xác thực vào hộp văn bảnwpf - xác thực - cách hiển thị chú giải công cụ và tắt nút "chạy"
<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>
Xác thực hộp văn bản này là OK - Tôi có nghĩa là khung màu đỏ xuất hiện trên hộp văn bản nếu dữ liệu sai. Tuy nhiên những gì tôi cần làm là hiển thị chú giải công cụ trên hộp văn bản đó, nhưng điều quan trọng hơn là tôi phải tắt nút "Chạy" nếu bất kỳ hộp văn bản nào có dữ liệu sai. Cách tốt nhất để làm taht là gì ??
EDIT Vấn đề đầu tiên đã được giải quyết, nhưng tôi có một vấn đề khác. Tôi cần phải sử dụng MultiBindings để xác nhận nút của tôi. Vì vậy, tôi đã làm sth như thế
<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>
My Chuyển đổi trông như thế
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
}
Tuy nhiên tôi nhận được InvalidCastException trong chuyển đổi này. Một diễn viên thích hợp trong trường hợp đó là gì? Tôi thoght như thể HasError là một loại bool vì vậy tôi nên cast to bool.
"Loại" có nghĩa là gì? Thay thế nó bằng "if (values.Cast(). Bất kỳ (val => val))" –
vorrtex