[英]Wpf prism Notify property changed with validation not set
我刚开始使用带有 wpf 的棱镜,不明白为什么我的属性没有更新。 我有一个带有验证的文本块绑定,它一直有效,直到我删除最后一个字符。 看了下调试器,没有调用set属性,而是调用了验证方法。 另外,我不明白更新 can 执行方法是如何工作的。 当我在文本框中输入字符时,它会触发返回 true,但删除后它不会更新。 我将不胜感激,这是我的代码。
我的视图模型(构造函数中的这个命令)
SaveCommand = new DelegateCommand(ExecuteSaveCommand, CanExecuteSaveCommand);
public string ImageTitle
{
get => _userImageModel.Title;
set
{
_userImageModel.Title = value;
RaisePropertyChanged();
SaveCommand.CanExecute();
}
}
private bool CanExecuteSaveCommand()
{
var x = string.IsNullOrWhiteSpace(_userImageModel.Title) == false ||
_userImageModel.Title!=null;
return x;
}
我的验证规则
public class UserImageValidator : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
if (value == null)
return new ValidationResult(false,"value cannot be empty");
if(!(value is string propertyValue))
return new ValidationResult(false,"exception");
if(string.IsNullOrWhiteSpace(propertyValue))
return new ValidationResult(false,"Required");
return ValidationResult.ValidResult;
}
}
我的观点
<TextBox
Grid.Row="0"
Grid.Column="1"
MinWidth="200"
Margin="5"
VerticalAlignment="Center"
MinLines="4"
Validation.ErrorTemplate="{StaticResource ErrorTemplate}">
<TextBox.Text>
<Binding Path="ImageTitle" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<validateRule:UserImageValidator />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
我不明白更新 can 执行方法是如何工作的。
您改为在命令上调用RaiseCanExecuteChanged
。 例如,框架调用CanExecute
来确定按钮是否启用。
另外, string.IsNullOrWhiteSpace(_userImageModel.Title) == false || _userImageModel.Title!=null
string.IsNullOrWhiteSpace(_userImageModel.Title) == false || _userImageModel.Title!=null
没有多大意义( != null
对于空白字符串是正确的),你的意思是.string.IsNullOrWhiteSpace( _userImageModel.Title )
吗?
检查这个属性,_userImageModel.Title,它在那里设置属性。 SaveCommand 也没有连接到文本框。
我找到了解决我的问题的方法。 就我们使用验证而言,如果值不正确,则不会设置它是合乎逻辑的。 这可以通过设置验证步骤 = 承诺值来避免。 但是,在那之后,在验证 class 中,我们不会获取值,而是表达式绑定(要获取值,只需使用此链接上的解决方案ValidationRule with ValidationStep="UpdatedValue" is called with BindingExpression 而不是更新值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.