我正在嘗試執行驗證屬性。我們有一個可以爲空的屬性:如何驗證WPF中的數據並設置默認值?
public int? Number
{
get { return _number; }
set
{
if (_number != value)
{
_number = value;
RaisePropertyChanged("Number");
}
}
}
而且這個屬性綁定到一個文本框。我只想驗證這兩個方案:
- 想象一下,用戶離開文本框爲空(textbox.text =「」),所以Number屬性必須接收空值(而不是「」)。
- 如果用戶輸入「2b」,Number屬性必須有一個空值(因爲是錯誤),但文本框仍然必須說「2b」。
我猜IDataNotifyError和ValidationRules不適用於此。我該如何解決這些情況?
編輯:我也使用ValidationRule來顯示自定義消息,當用戶輸入不正確的格式。但是,當這種情況發生時,不會將該屬性解除爲空。如果在該錯誤中出現錯誤,它會觸發,但不會顯示任何錯誤消息。
<TextBox.Text>
<Binding Path="Number" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True" ValidatesOnExceptions="True" NotifyOnValidationError="True" Converter="{x:Static c:IntConverter.Default}" >
<Binding.ValidationRules>
<r:NumericValidation />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
的驗證規則
public class NumericValidation : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
int? response;
bool noIllegalChars = TryParseStruct<int>(value.ToString(), out response);
if (noIllegalChars == false)
{
return new ValidationResult(false, "Input is not in a correct format.");
}
else
{
return new ValidationResult(true, null);
}
}
...
}
ValidationRules在這種情況下不起作用? –
@Kai因爲驗證僅僅是爲了給用戶提供一些驗證的約束條件。我的意思是,它不像在這種情況下那樣對待邏輯。 –