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 클래스 : 나는 < 버튼의 의 IsEnabled 부동산/를 통해 >이을 SaveCommand를 조작 할, 나는 그것이 경우에만 사용 가능합니다 원하는
public class SelectableObject : System.ComponentModel.INotifyPropertyChanged
{
public string Name { get; set; }
public bool IsSelected { get; set; }
}
가 양식에 오류가 없습니다. 그러나 이것을 검증하는 방법을 알아낼 수는 없습니다 : 최소 1 주일을 선택해야했습니다.
예,들을 수는 의 평일 컬렉션의 모든 개체의 이벤트를하여 PropertyChanged하지만,이 경우 유효성 검사 논리에 IDataErrorInfo 인터페이스에서 분리됩니다.
이 문제에 대한 해결책이 있습니까? 컬렉션에 대한 유효성 검사 논리를 IDataErrorInfo 인터페이스에 삽입하는 방법?
유일한 방법은이 방법입니까? 귀하의 경우 나는 CanSaveCommandExecute 언제든지 평일의 IsSelected 속성 변경 - 그래서 PropertyChanged 이벤트를 처리 할 필요가 제기 ... – stukselbax
아니 아니 당신이 아무것도 인상하지 않아도 - wpf 당신을 위해이 일을. 나는 당신이 RelayCommand 또는 DelegateCommand를 사용하는지 모르지만 둘 다 CanExecute 메소드가 있고이 메소드는 wpf의 CommandManager에서 호출됩니다. 이 방법을 제공하면됩니다. 이걸 시험해 봐. – blindmeis
프리즘 라이브러리에서 DelegateCommand를 사용합니다. 그래서 ViewModel에서 속성이 변경 될 때마다 CanExecuteChanged를 발생시켜야합니다. 그 좋은 방법, 왜냐하면 나는 이벤트를 일으킬 순간을 제어하고 있기 때문이다. – stukselbax