Использование IDataErrorInfo в M-V-VM

  1. Удалить $user_detail=new Profile;
  2. Использовать отношения для обновления сведений о пользователе.
  3. Читайте о $request->all() и Mass Assignment в Laravel.
  4. Выполните проверку формы в отдельных файлах.
12
задан Micah 4 December 2008 в 19:59
поделиться

4 ответа

Можно реализовать IDataErrorInfo дополнительно в VM и направить вызовы к VM к соответствующим объектам области. Я думаю, что это - единственный путь, не подвергая объекты области непосредственно представлению.

18
ответ дан 2 December 2019 в 05:28
поделиться

при использовании M-V-VM ViewModel должен определить интерфейс IDataErrorInfo, не модель.

Вы могли сказать, что интерфейс IDataErrorInfo только для представления, и это не принадлежит модели, но это - вопрос стиля.

Наличие ViewModel реализует интерфейс IDataErrorInfo и распространяет ошибки из модели, был бы самый простой ответ.

7
ответ дан 2 December 2019 в 05:28
поделиться

There is a good MSDN Magazine article on this topic, WPF Apps With The Model-View-ViewModel Design Pattern: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

According to this article, in The Data Model and Repository section (http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090102) you will find a simple implementation. The Customer is the entity class and the ViewModel gets the error indicators from the entity.

You can use ValidationsRule to check data validity:

<TextBox x:Name="title" VerticalAlignment="Top" TextWrapping="Wrap" Grid.Column="1" MinWidth="20">
  <TextBox.Text>
    <Binding Path="Title" UpdateSourceTrigger="LostFocus">
      <Binding.ValidationRules>
        <Validators:StringRangeValidationRule MinimumLength="1" MaximumLength="30" 
                                            ErrorMessage="Address is required and must be less than 30 letters." />
      </Binding.ValidationRules>
    </Binding>
  </TextBox.Text>
</TextBox>

This is an example of validator styling:

<Application.Resources>
  <Style TargetType="{x:Type TextBox}">
  <Setter Property="Validation.ErrorTemplate">
    <Setter.Value>
      <ControlTemplate>
        <DockPanel LastChildFill="True">
          <Image Source="/Images/error.png" Width="25" Height="25" ToolTip="{Binding ElementName=MyAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" />
          <TextBlock DockPanel.Dock="Right"
              Foreground="Orange"
              Margin="5" 
              FontSize="12pt"
              Text="{Binding ElementName=MyAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
          </TextBlock>

          <Border BorderBrush="Red" BorderThickness="3">
          <AdornedElementPlaceholder Name="MyAdorner" />
        </Border>
      </DockPanel>
    </ControlTemplate>
  </Setter.Value>
</Setter>
<Style.Triggers>
  <Trigger Property="Validation.HasError" Value="true">
    <Setter Property="ToolTip"
        Value="{Binding RelativeSource={RelativeSource Self}, 
        Path=(Validation.Errors)[0].ErrorContent}"/>
  </Trigger>
</Style.Triggers>


3
ответ дан 2 December 2019 в 05:28
поделиться

Пример приложения BookLibrary из WPF Application Framework (WAF) может быть вам интересен. Он реализует интерфейс IDataErrorInfo также на объектах домена и использует паттерн M-V-VM.

0
ответ дан 2 December 2019 в 05:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: