スカラープロパティとコレクションプロパティを含むMyViewModelがあります。
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; }
}
SaveCommandを介して<Button/>のIsEnabledプロパティを操作したいのですが、フォームにエラーがない場合にのみ有効にします。しかし、これを検証する方法がわかりません。少なくとも1つのWeekDayを選択する必要がありました。
はい、WeekDaysコレクション内のすべてのオブジェクトのPropertyChangedイベントをリッスンできますが、この場合、検証ロジックはIDataErrorInfoインターフェイスから分離されます。
この問題の解決策はありますか?コレクションの検証ロジックをIDataErrorInfoインターフェイスに配置するにはどうすればよいですか?