Я пытаюсь реализовать метод проверки данных на примере Джоша Смита: Использование модели представления для обеспечения значимой проверки ...
Мой код очень похож на пример, за исключением небольшого различия, а именно, я использую инструментарий MVVM-Light, а мой класс модели - это частичный класс, который происходит из бэкэнда WCF.
Вот пример кода, о котором идет речь:
Во-первых, это автоматически сгенерированная версия класса из WCF:
public partial class Person : BaseObject
{
private string FooField;
public string Foo {
get {
return this.FooField;
}
set {
if ((object.ReferenceEquals(this.FooField, value) != true)) {
this.FooField = value;
this.RaisePropertyChanged("Foo");
}
}
}
Затем я расширяю частичный класс для реализации IDataErrorInfo:
public partial class Person : IDataErrorInfo
{
public string Error
{
get { return null;}
}
public string this[string propertyName]
{
if (propertyName == "Foo")
{
//Do some backend Validation
}
}
}
И, наконец, у меня есть модель просмотра:
public class PersonViewModel : INotifyProperyChanged, IDataErrorInfo
{
private string _fooString;
private Person _person;
...
public string Foo {
get { return _fooString; }
set
{
if (value == _fooString;)
return;
_fooString = value;
RaisePropertyChanged("Foo");
}
public string this[string propertyName]
{
if (propertyName == "Foo")
{
string msg = Validate(Foo); //Frontend Validation, range, format, etc.
if(msg ! = null)
return msg;
_person.Foo = Foo;
}
}
}
Поэтому, когда я связываюсь со свойством в модели представления, код проверки, определенный в индексаторе IDataErrorInfo, выполняется в модели представления и в моем текстовом поле или в любом другом случае, если моя проверка завершается неудачно, как и ожидалось. Однако в моем коде индексатор на стороне МОДЕЛИ никогда не выполняется вообще. Я могу честно сказать, что я не вижу или не понимаю механизм, который должен вызывать его. Я выполнил пример кода из примера Джоша Смита, и он работает, вызывая MV this [], а затем, если проверка проходит хиты Model [this], для дополнительной проверки, но я на всю жизнь не могу понять, как это случается.
Я действительно надеюсь, что это что-то простое, что я пропускаю. Спасибо за просмотр.