문제

내 도메인 객체가 IdataerRorinfo를 구현하고 MV-VM을 사용하는 경우 뷰 모델을 통해 오류를보기로 어떻게 전파합니까? 모델에 직접 바인딩되면 바인딩에서 "ValidateOnexceptons"및 "ValidateOnerrors"속성을 true로 설정합니다. 그러나 내 뷰 모델은 IdataerRorinfo를 구현하지 않습니다. 내 모델 만. 내가 어떻게해야하나요?

설명도메인 객체에서 idataerrorinfo를 구현하는 기존 코드베이스를 다루고 있습니다. My View 모델에서 IdataerRorinfo를 구현할 수는 없습니다.

도움이 되었습니까?

해결책

VM에서 IdataerRorinfo를 추가로 구현하고 VM으로 호출을 해당 도메인 개체로 라우팅 할 수 있습니다. 도메인 객체를보기에 직접 노출시키지 않고는 이것이 유일한 방법이라고 생각합니다.

다른 팁

MV-VM을 사용하는 경우 ViewModel은 모델이 아닌 IdataErrorInfo 인터페이스를 정의해야합니다.

IdataerRorinfo 인터페이스는보기를위한 것이며 모델에 속하지 않지만 스타일의 문제라고 말할 수 있습니다.

ViewModel이 IdataErrorInfo 인터페이스를 구현하고 모델에서 오류를 전파하는 것이 가장 간단한 대답입니다.

이 주제에 대한 좋은 MSDN 매거진 기사가 있습니다. WPF 앱은 Model-View-ViewModel 디자인 패턴을 사용합니다. http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

이 기사에 따르면 데이터 모델 및 저장소 섹션 (http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090102) 간단한 구현을 찾을 수 있습니다. 고객은 엔티티 클래스이며 뷰 모델은 엔티티에서 오류 표시기를 가져옵니다.

ValidationSrule을 사용하여 데이터 유효성을 확인할 수 있습니다.

<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>

이것은 유효성 검사기 스타일의 예입니다.

<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>


그만큼 책장 샘플 적용 WPF 응용 프로그램 프레임 워크 (WAF) 당신에게 흥미로울 수 있습니다. 도메인 객체에서 IdataerRorinfo 인터페이스를 구현하고 MV-VM 패턴을 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top