我的xamarin表单应用程序中有一个datagrid,它有一个可编辑的列。该列中的值来自MySql数据库,用户可以更改该值并存储到db。我使用IPropertyChanged接口允许用户对值进行更改。编辑值时有一个条件。新值必须等于或大于原始值。我的问题是每当我输入一个大于原始值的值时,我都无法再次将值编辑为之前的值。例如,原始值为10.我输入的新值是30.如果我想再次更改该值,这次我将其设置为20,它不允许我,因为现在原始值是30而不是10和20是否小于30.我如何保留原始值并与之进行比较?
public int ActualReading
{
get
{
return _ActualReading;
}
set
{
if (value >= _ActualReading)
{
_ActualReading = value;
RaisePropertyChanged("ActualReading");
}
else
{
UserDialogs.Instance.Alert("Meter readings should not be smaller than previous value.","Error","Ok");
}
}
}
private void RaisePropertyChanged(String Name)
{
if (PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(Name));
}
答案 0 :(得分:1)
您必须存储原始值。我使用以下模式。
假设您有这样的模型
public class Model
{
public int ActualReading {get; set;}
}
和这样的视图模型(我删除了INotifyPropertyChanged
部分以便更好地阅读)
public class ViewModel
{
private readonly Model MyModel;
private int _actualReading;
public int ActualReading
{
get { return _actualReading; }
set { _actualReading = value; }
}
public ViewModel(Model model)
{
MyModel = model;
ActualReading = model.ActualReading;
}
public Model GetModel()
{
MyModel.ActualReading = ActualReading;
return MyModel;
}
}
创建ViewModel
实例时,使用相应的Model
实例对其进行初始化。实施此操作后,您可以通过这种方式轻松添加支票。
private int _actualReading;
public int ActualReading
{
get { return _actualReading; }
set
{
if (value >= MyModel.ActualReading)
{
_actualReading = value;
}
else
{
UserDialogs.Instance.Alert("Meter readings should not be smaller than previous value.", "Error", "Ok");
}
}
}