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