繁体   English   中英

用户输入验证绑定

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM