0
我有一个MyViewModel,它包含标量属性和集合属性。如何通过IDataErrorInfo接口验证属于ViewModel集合的对象的属性
public class MyViewModel :
System.ComponentModel.INotifyPropertyChanged,
System.ComponentModel.IDataErrorInfo
{
public MyViewModel()
{
List<SelectableObject> list = new List<SelectableObject>();
foreach (var weekDay in System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.DayNames)
{
list.Add(new SelectableObject() { Name = weekDay, IsSelected = false });
}
WeekDays = list;
}
public string Catalog { get; set; }
public DateTime CreationTime { get; set; }
public DateTime ModificationTime { get; set; }
public IEnumerable<SelectableObject> WeekDays { get; private set; }
public ICommand SaveCommand { get; private set; }
public string Error
{
get { return string.Empty; }
}
public string this[string columnName]
{
get
{
var errorResult = string.Empty;
switch (columnName)
{
case "CreationTime":
// Validation logic
break;
case "ModificationTime":
// Validation logic
break;
default:
break;
}
return errorResult;
}
}
}
SelectableObject类:
public class SelectableObject : System.ComponentModel.INotifyPropertyChanged
{
public string Name { get; set; }
public bool IsSelected { get; set; }
}
我想操纵<巴顿/ 的IsEnabled财产>通过SaveCommand,我想它会启用,只有当没有错误的形式。但我无法弄清楚如何验证这一点:至少需要选择一个WeekDay。
是的,我可以听的PropertyChanged事件平日集合中的每个对象的,但在这种情况下,验证逻辑将从IDataErrorInfo的接口分开。
有没有解决这个问题的方法?如何将集合的验证逻辑添加到IDataErrorInfo接口?
这是唯一的方法吗?在你的情况下,我必须在平日的IsSelected属性发生变化时随时提出CanSaveCommandExecute - 所以我必须处理PropertyChanged事件... – stukselbax 2012-07-30 07:54:25
不,不,你不必提出任何事情 - wpf为你做这件事。我不知道你是否使用RelayCommand或DelegateCommand,但都有一个CanExecute方法,这些方法是从wpf中的CommandManager调用的。你只需要提供这种方法。试试看。 – blindmeis 2012-07-30 08:09:20
我使用棱镜库中的DelegateCommand。所以每次更改ViewModel的属性时,我都必须提高CanExecuteChanged。它的好方法,因为我控制着提升事件的时刻。 – stukselbax 2012-07-30 08:21:24