【发布时间】:2011-01-01 14:09:12
【问题描述】:
嗨 我需要验证我的应用程序中的一些文本框。我决定使用验证规则 “数据错误验证规则”。这就是为什么在我的课堂上我实现了 IDataErrorInfo 接口并编写了适当的函数。在我的 xaml 代码中,我向文本框添加了绑定和验证规则
<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>
这个文本框的验证没问题 - 我的意思是如果数据错误,文本框上会出现红框。但是我需要做的是在该文本框上显示工具提示,但更重要的是,如果任何文本框有错误的数据,我必须禁用按钮“运行”。最好的方法是什么??
编辑 第一个问题解决了,但我还有另一个问题。我需要使用 MultiBindings 来验证我的 Button。所以我就这么做了
<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>
我的转换器看起来像这样
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
}
但是我在这个转换器中得到了 invalidCastException。在这种情况下,什么是合适的演员表?我认为 HasError 好像是 bool 类型,所以我应该转换为 bool。
【问题讨论】:
-
“类型”是什么意思?将其替换为“if(values.Cast
().Any(val=>val))”
标签: wpf validation