2015-09-10 2 views
1

В нашем проекте у нас есть LookUp Base ViewModel, который имеет Required-Attribute на SelectedItem. У меня есть другой вид, который использует один из child LookUps, который должен игнорировать Required -трибут. Я уже переопределен метод IsValid в ViewModel, поэтому экономия, не заботясь о Required работает правильно, но, к сожалению, это все еще показывает ошибку проверки на виду, когда я опустошите LookUp: enter image description hereСкрыть ValidationError border и текст на вид с пользовательским стилем

У меня было несколько возможности:

  1. расколоть LookUpBaseViewModel в два Чайлдс, которые также являются «BaseViewModels», один с RequiredAttribute и один без. Это работает, но кажется, что это слишком много работы и много дополнительных классов для всего одного представления, которое не должно показывать ошибки проверки в представлении.

  2. Замените RequiredAttribute на RequiredIf-Attribute и добавьте параметр Boolean IsRequired в конструктор. Это не работает, поскольку мы используем AutoFac в нашем проекте, поэтому мы не можем использовать логический параметр для реализации ILookUpBaseViewModel -interface.

  3. Добавить стиль в LookUp-ContentControl на вид, чтобы скрыть ValidationError border & text. Это казалось самым простым решением на бумаге, и также имеет смысл просто скрыть нежелательные ValidationError border & text.

Итак, мой вопрос, как мне сделать стиль, чтобы скрыть ошибку проверки WPF по умолчанию (так что красная рамка и текст за ней)? Я новичок, когда дело доходит до стилей, но это то, что я пытался (и который не делает ничего, кажется):

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <Style x:Key="HideValidationErrorContentControlStyle" TargetType="{x:Type ContentControl}" BasedOn="{StaticResource {x:Type ContentControl}}"> 
     <Setter Property="Validation.ErrorTemplate"> 
      <Setter.Value> 
       <ControlTemplate> 
        <!-- Empty --> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
      <Trigger Property="Validation.HasError" Value="True"> 
       <Setter Property="Validation.ErrorTemplate"> 
        <Setter.Value> 
         <ControlTemplate> 
          <!-- Empty --> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

</ResourceDictionary> 

С стилем на моем LookUp-ContentControl, как это:

<ContentControl x:Name="MyLookup" Style="{StaticResource HideValidationErrorContentControlStyle}"/> 

Это результат я хочу (даже когда ValidationError обычно будет показано ниже): enter image description here

+0

Установите Validation.ErrorTemplate = "{x: Null}" на элемент управления, где вам не нужна красная рамка ошибки. –

ответ

0

Может быть, это не ваш LookUp-ContentControl один показывает ошибку, но другой контроль внутри него. A TextBox, может быть?

Кроме того, вместо того, чтобы оставить ErrorTemplate пустым, попробуйте добавить AdornedElementPlaceholder.

<Style x:Key="HideValidationErrorContentControlStyle" TargetType="{x:Type ContentControl}" BasedOn="{StaticResource {x:Type ContentControl}}"> 
    <Setter Property="Validation.ErrorTemplate"> 
     <Setter.Value> 
      <ControlTemplate> 
       <AdornedElementPlaceholder /> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Скорее всего, это не нужно, но лучше быть в безопасности, чем сожалеть.

Смежные вопросы