سؤال

إذا كان نطاقي الكائنات تنفيذ IDataErrorInfo و أنا باستخدام M-V-VM, كيف يمكنني نشر الأخطاء من خلال ViewModel في الرأي ؟ إذا كنت ملزم مباشرة إلى نموذج ، أود أن تعيين "ValidateOnExceptons" و "ValidateOnErrors" خصائص صحيح على ملزمة.لكن ViewModel لا تنفذ IDataErrorInfo.فقط من طراز بي.ماذا علي أن أفعل ؟

التوضيح أنا التعامل مع القائمة تعليمات البرمجة الأساسية التي تطبق IDataErrorInfo في مجال الكائنات.لا أستطيع تنفيذ IDataErrorInfo في رأيي نموذج.

هل كانت مفيدة؟

المحلول

يمكنك تنفيذ IDataErrorInfo بالإضافة إلى ذلك في VM توجيه المكالمات إلى VM إلى المقابلة كائنات المجال.أعتقد أن هذا هو السبيل الوحيد دون تعريض كائنات المجال مباشرة إلى الرأي.

نصائح أخرى

إذا كنت تستخدم M-V-VM ، ViewModel ينبغي أن تحدد IDataErrorInfo واجهة ليس النموذج.

هل يمكن أن نقول أن IDataErrorInfo واجهة هو مجرد رأي و لا ينتمي في النموذج ، ولكن هذا سؤال من نمط.

وجود ViewModel تنفيذ IDataErrorInfo واجهة ونشر الأخطاء من نموذج يمكن أن تكون أبسط الجواب.

هناك MSDN المجلة حول هذا الموضوع ، تطبيقات WPF مع نموذج-الرأي-ViewModel نمط التصميم: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

وفقا لهذه المادة ، في نموذج البيانات و مستودع القسم (http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090102) سوف تجد بسيطة التنفيذ.العميل هو الكيان فئة ViewModel يحصل الخطأ المؤشرات من الكيان.

يمكنك استخدام 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>


على BookLibrary عينة تطبيق تطبيق WPF إطار (WAF) قد تكون مثيرة للاهتمام بالنسبة لك.وتنفذ IDataErrorInfo واجهة وكذلك على المجال الكائنات وأنه يستخدم M-V-VM نمط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top