Проблема в том, что красный прямоугольник не отображается в пользовательском интерфейсе.MVVM pattern: проверка идентификатора IDataErrorInfo не работает, если мы обернули модель внутри другой модели
Я использую Caliburn.Micro и это то, что у меня в Вид:
<StackPanel Grid.Row="0">
<Label>Customer name:</Label>
<TextBox x:Name="txtName" Text="{Binding Target.Model.Name, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" Width="136" HorizontalAlignment="Left"/>
</StackPanel>
Вот является ViewModel:
internal class ShellViewModel : Screen
{
private EditableCustomer _Target;
public EditableCustomer Target
{
get { return _Target; }
set { if (_Target != value) { _Target = value; NotifyOfPropertyChange(nameof(Target)); } }
}
}
Это то, что я имею в Модель:
internal class EditableCustomer : PropertyChangedBase, IDataErrorInfo
{
private CustomerInfo _Model;
public CustomerInfo Model
{
get { return _Model; }
set { if (_Model != value) { _Model = value; NotifyOfPropertyChange(nameof(Model)); } }
}
}
И это еще одна модель:
internal class CustomerInfo : PropertyChangedBase
{
private string _Name;
public string Name
{
get { return _Name; }
set { _Name = value; NotifyOfPropertyChange(nameof(Name)); }
}
}
Я знаю, что могу двигаться интерфейс IDataErrorInfo от EditableCustomer к модели CustomerInfo и все будет прекрасно работать, если я делаю это, но проблема в том, что я не позволил внести изменения в модель CustomerInfo,
Кто-нибудь знает, что еще я могу сделать?
Где вы привязываете свое текстовое поле к стилю ошибки? – FCin
Что такое стиль ошибки? Извините, я не понимаю ваш вопрос. Я просто знаю, что могу перемещать IDataErrorInterface в CustomerInfo, а потом все работает отлично. – Navuhodonosor
Где вы храните информацию о своей ошибке? 'IDataError' только проверяет данные, он не знает, как отображать ваши ошибки. Вот пример стилизации ваших ошибок: http://stackoverflow.com/questions/14023552/how-to-use-idataerrorinfo-error-in-a-wpf-program – FCin