繁体   English   中英

MVVM上文本框的验证和最后值

[英]Validation and last value of textbox on MVVM

我有这样的文本框声明:

<TextBox x:Name="InputTextBox">
                <Binding Path="Input" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
                    <Binding.ValidationRules>
                        <MyValidationRule
                        ErrorMessage="Invalid" />
                    </Binding.ValidationRules>
                </Binding>
                <TextBox.InputBindings>
                    <KeyBinding Key="Enter" Command="{Binding Path=AddCommand}"/>
                </InputBindings> 
  </TextBox>

这样的validationRule层次结构:

public abstract class AbstractValidationRule : ValidationRule
{
    public string ErrorMessage { get; set; }

    protected abstract bool IsValid(string inputString)

    public override ValidationResult Validate(object value, CultureInfo cultureInfo)
    {
        string inputString = (value ?? string.Empty).ToString();

        if (!IsValid(inputString)) return new ValidationResult(false, ErrorMessage);
        return new ValidationResult(true, null);
    }
}

class MyValidationRule : AbstractStringValidationRule
{
    protected override bool IsValid(string inputString)
    {
        return !String.IsNotNullOrEmpty(inputString);
    }
}

添加命令:

    public ICommand AddCommand
    {
        get
        {
            return m_AddCommand ??
                   (m_AddCommand = new DelegateCommand(Add));
        }
    }

private void Add()
    {
        InternalValue = Input;
        // input = Old invalid value
        OnPropertyChanged("Input")
    }

输入属性:

  public string Input
    {
        get { return m_Input; }
        set
        {
            if (m_Input != value)
            {
                m_Input = value;
                OnPropertyChanged("Input");
            }
        }
    }

如果我输入的是“ valid”然后是“ invalid”,则在执行命令时,属性Input将设置为“ valid”值状态。 我用UpdateSourceTrigger =“ Explicit”尝试了另一种方式,并使用TextChanged事件-仍然是相同的结果。

没有ValidationRule-一切正常。

PS我不能从模型层更改类。

嗨,设置UpdateSourceTrigger =“ PropertyChanged”。希望这会有所帮助。

如果您希望验证/视图模型和“ ui”同步,则应使用IDataErrorInfo。 您的Input属性应包含“有效”和“无效”值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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