我正在使用IDataErrorInfo来验证我的字段,字段的绑定和错误显示都正常工作。但我不知道SaveButton如何知道字段中是否存在错误?目前我找到了解决此问题的方法。但我确信有更好的方法可以做到这一点。
以下是我的代码的一部分,我认为你需要看到它来帮助我:
型号:
public TransactionModel : IDataErrorInfo
{
public enum Field
{
Col1,
Col2
Col3,
//...
};
public List<Field> Errors = new List<Field>();
public string Error { get { throw new NotImplementedException(); } }
public string this[string columnName]
{
get
{
string result = string.Empty;
switch (columnName)
{
case "col1":
//validation goes here
if (errors found)
{
result = "error message";
Errors.Add(Field.Col1);
}
else
{
result = string.Empty;
if (Errors.Exists(x => x == Field.Col1))
Errors.Remove(Field.Col1);
}
break;
case "col2":
//validation goes here
if (errors found)
{
result = "error message";
Errors.Add(Field.Col2);
}
else
{
result = string.Empty;
if (Errors.Exists(x => x == Field.Col2))
Errors.Remove(Field.Col2);
}
break;
case "col3":
//etc....
return result;
}
}
}
}
查看:
<Button Command="{Binding SaveCommand}" Content="Save"/>
视图模型:
public ICommand SaveCommand
{
get { return new DelegateCommand(Save); }
}
private void Save()
{
if (Transaction.Errors.Count <= 0)
{
//save transaction routine goes here
}
else
{
MessageBox.Show("Please correct the errors in red", "Error");
}
}
谢谢你的帮助! :)
答案 0 :(得分:1)
您应该将Error属性的实现更改为:
public string Error
{
get { return this[null]; }
}
然后为了简单起见添加另一个属性:
public bool IsValid
{
get { return string.IsNullOrEmpty(this.Error); }
}