[英]User Input Validation Binding
嘿嘿,
我不知道如何解决我的问题。 我想从我的文本框中验证用户输入,然后如果输入错误,则更改标签的颜色。我需要在获取和设置中验证输入吗? 或者这完全是错误的?
我的 xaml 代码:
<Label x:Name="lblEmail" Content="Email Adress" Foreground="{Binding EmailAdressValid}"/>
<TextBox x:Name="txtEmail" Text="{Binding EmailAdress, UpdateSourceTrigger=PropertyChanged}"/>
我的数据类:
public class MainData : INotifyPropertyChanged {
private int _emailAdress;
public int EmailAdress
{
get { return _emailAdress; }
set
{
_emailAdress = value;
OnPropertyChanged(nameof(EmailAdress));
}
}
private System.Windows.Media.Brush _emailAdressValid;
public System.Windows.Media.Brush EmailAdressValid
{
get { return _emailAdressValid; }
set
{
if(_emailAdress.Contains("@")) {
_emailAdressValid = Brushes.Black;
}
else {
_emailAdressValid = Brushes.Red;
}
OnPropertyChanged(nameof(EmailAdressValid));
}
}
}
IMO 您没有遵循在 WPF 中进行验证的正确方法。 为此,我们有IDataErrorInfo
。 将此视为入门。
现在回到你的问题,你的代码说它永远不会更新错误画笔,直到你set
它,你没有。 事实上,您不需要EmailAdressValid
属性中的 setter。 在视图中提供电子邮件地址时,只需调用OnPropertyChanged
。
public class MainData : INotifyPropertyChanged
{
private string _emailAdress;
public string EmailAdress
{
get { return _emailAdress; }
set
{
_emailAdress = value;
OnPropertyChanged(nameof(EmailAdress));
OnPropertyChanged(nameof(EmailAdressValid));
}
}
private System.Windows.Media.Brush _emailAdressValid;
public System.Windows.Media.Brush EmailAdressValid
{
get
{
if(_emailAdress.Contains("@"))
{
_emailAdressValid = Brushes.Black;
}
else
{
_emailAdressValid = Brushes.Red;
}
return _emailAdressValid;
}
}
}
直接使用控制绑定功能将标签绑定到电子邮件输入文本框。 然后使用值转换器验证值 oe 电子邮件并返回所需的背景颜色。 请参阅以下代码以供参考:
public class TextToBackgroundConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { // Validate the email text and retun background color of your choice } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { // Not needed } }
Include this resource as static resource in xaml file and use in the binding as below
<Label x:Name="lblEmail" Content="Email Adress" Foreground="{Binding ElementName=txtEmail,Path=Text,Converter={StaticResource bgconverter}}"}"/> <TextBox x:Name="txtEmail" Text="{Binding EmailAdress, UpdateSourceTrigger=PropertyChanged}"/>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.