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