3 回答
TA贡献1995条经验 获得超2个赞
我将模型的 int 属性包装在一个字符串属性中,因为 TextBox.Text 是一个字符串,其他任何东西都会产生转换错误。
ViewModel 需要自己的字符串,而不是总是将用户的输入转换为 int,因为用户可能会清除该框,或者在键入“-1”的过程中部分输入了一个不是有效数字的值。当您收到转换错误时,WPF 绑定无法更新视图模型,因此您不知道有问题。
private string firstArgument;
public string FirstArgument
{
get
{
return this.firstArgument;
}
set
{
this.firstArgument= value;
int tempInt;
if (int.TryParse(value, out tempInt))
{
this.Model.FirstArgument = tempInt;
}
this.NotifyPropertyChanged();
}
}
以下是我用来验证字符串是否为有效 int 的大部分代码。
protected void NotifyPropertyChanged([CallerMemberName]string propertyName = null)
{
this.CheckForPropertyErrors();
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public override void CheckForPropertyErrors()
{
this.ValidateInt(this.FirstArgument , nameof(this.FirstArgument ));
}
protected void ValidateInt32(string value, string fieldName, string displayName = null)
{
int temp;
if (!int.TryParse(value, out temp))
{
this.AddError(new ValidationError(fieldName, Constraints.NotInt32, $"{displayName ?? fieldName} must be an integer"));
}
else
{
this.RemoveError(fieldName, Constraints.NotInt32);
}
}
TA贡献1874条经验 获得超12个赞
int变量的默认值为0。我想,这会帮助你
private int? _number1;
public int? firstargument
{
get { return _number1; }
set
{
this._number1 = value;
this.OnPropertyChanged("firstargument");
}
}
TA贡献1851条经验 获得超5个赞
原因
您在运行窗口中获得 a 的原因0是您的绑定属性都是int并且0是 a 的默认值int。
0of anint是 XAML 绑定系统的有效值,因此在您键入任何内容之前,您会看到所有TextBoxes 都包含 a 。0
解决方案
您的所有属性都应该是 astring并转换您的实际数字:
private int? _number1;
public string FirstArgument
{
get => _number1?.ToString();
set
{
if (int.TryParse(value, out var number))
{
_number1 = number;
OnPropertyChanged("FirstArgument");
}
else
{
_number1 = null;
}
}
}
注意:
因为您可能会得到一个无法转换为的文本
int
,所以您可以int?
在输入错误号时使用它来存储空值。将您的数字转换为字符串或从字符串转换,以便它可以正确显示到您的 XAML 绑定系统中。
该属性应该是字符串,不能是 an,
int?
因为 XAML 绑定系统不会自动将 a 转换string
为 anint
,除非您自己转换或编写新的IValueConverter
.
更新
要实现该Add命令,只需使用字段而不是属性。
private void AddNumbers()
{
var a = _number1?.Value ?? 0;
var b = _number2?.Value ?? 0;
var c = a + b;
_addedargument = c;
}
如果要将结果存储到模型中,则存储a, b,c值。
- 3 回答
- 0 关注
- 243 浏览
添加回答
举报