2013-05-29 19 views
0

Я хочу сделать валидацию в отдельном определении xaml с помощью собственного кода на C# для создания окон. Я был read the resource о коде как такая проверка с таможенной проверкойКак сделать разделенную проверку в приложении WPF в приложении Windows

<Window xmlns:validators="clr-namespace:MyValidators" [...]/> 

, а затем это определение XAML с помощью специального кода

<TextBox x:Name="textAge"> 
    <TextBox.Text> 
     <Binding Path="Name"> 
      <Binding.ValidationRules> 
       <validators:StringRangeValidationRule 
       MinimumLength="1" 
       ErrorMessage="Age is required." /> 
      </Binding.ValidationRules> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 

Но я хочу, чтобы проверка стала как этого

<TextBox x:Name="textAge" Text="{Binding Path=Age}"/> 

И в отдельном файле я хочу определить свою собственную проверку, например Validation.xml

<validation:StringrangeValidationRule target="textAge" MinimumLength="1" errorMessage="Age is required" /> 

Как я могу это сделать, у меня так много текстовых полей с различными правилами проверки. Я не хочу смешивать определение текстового поля и проверки в одном месте, что может заставить меня трудно читать код ...

Любая помощь С уважением ..

ответ

1

Вы можете поместить Binding и проверку правило в стиле ключа и назначить его текстовому полю. Ниже приведен пример

<Window.Resources> 
    <Style x:Key="SomeNameTextBoxStyle" TargetType="{x:Type TextBox}"> 
     <Style.Setters> 
      <Setter Property="Text"> 
       <Setter.Value> 
        <Binding Path="SomeName"> 
         <Binding.ValidationRules> 
          <validators:StringRangeValidationRule 
           MinimumLength="1" 
           ErrorMessage="SomeName is required." /> 
         </Binding.ValidationRules> 
        </Binding> 
       </Setter.Value> 
      </Setter> 
     </Style.Setters> 
    </Style> 
</Window.Resources> 

Присвоить этот стиль в текстовое поле

<TextBox Style="{StaticResource SomeNameTextBoxStyle}"/> 

Я думаю, что это должно работать. Однако я бы предложил вам также посмотреть интерфейс IDataErrorInfo, который также обеспечивает способ проверки свойств.

+0

Но у моего текстового поля почти разные проверки для каждого из них. Есть ли какой-либо метод, который, как я описал ранее, .... – mrhands

+0

Вы можете иметь столько стилей, которые определены для TextBox в словаре ресурсов XAML, и назначить их для разных отдельных текстовых блоков на ключ. Например, у вас может быть стиль ** TextBoxStyle1 ** таргетинг ** TextBox1 ** и ** TextBoxStyle2 ** таргетинг ** TextBox2 ** и т. Д. Если вы хотите сохранить WPF ValidationRule, тогда определите базовый стиль для вашего TextBox, который будет включать ваши обычные стили для всех текстовых полей, а затем для отдельных стилей TextBox, содержащих правило проверки, используйте атрибут ** BasedOn ** стиля, например * * BasedOn = "{StaticResource BaseTextBoxStyle}" **. – Jatin

0

Почему бы не использовать блок приложения для проверки работоспособности корпоративной библиотеки. Затем вы можете указать проверку свойств объекта с помощью атрибутов или конфигурации (в отдельном, не скомпилированном XML-файле).

Ваш XAML будет выглядеть следующим образом:

<TextBox Text="{Binding SomeName, ValidatesOnDataErrors=True}"/> 

Существует new version of Enterprise Library (версия 6), который был выпущен в апреле этого года.

Настоящие hands-on labs от Microsoft дают хорошее руководство по началу работы с вами (это для более ранней версии, но принципы одинаковы).

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