2013-03-28 2 views
1

Проблема, которую я имею сейчас, это то, что Для каждого текстового блока, который у меня есть в настоящее время, я должен указать путь привязки, чтобы проверить, пуст или нет текстовый блок. Однако, если так получилось, что у меня есть сто textBox, я не могу создать метод get и set для всего 100 текстовых полей отдельно. Итак, есть ли лучший способ сделать текущую проверку, которая у меня есть сейчас?Как сделать валидацию для обязательного поля без использования пути привязки

Ниже коды, которые я в настоящее время есть,

В XAML

<Grid.BindingGroup> 
      <BindingGroup Name="RequiredFields"> 
       <BindingGroup.ValidationRules> 
        <local:MandatoryFieldRule ValidationStep ="CommittedValue"/> 
       </BindingGroup.ValidationRules> 
      </BindingGroup> 
     </Grid.BindingGroup> 
      <TextBox x:Name="ds_instruct" HorizontalAlignment="Left" Height="30" 
       Margin="286,186,0,0" TextWrapping="Wrap" VerticalAlignment="Top"  
       Width="275" FontSize="11" GotFocus="textBox_Expand"              
       LostFocus="textBox_Expand" Tag="Default Special Instruction" 
       SpellCheck.IsEnabled="True" 
       Text="{Binding Path=Text, BindingGroupName=RequiredFields,ValidatesOnDataErrors=true}"/> 

В файле проверки:

public String Text { get; set; } 
public String Text1 { get; set; } 

#region IDataErrorInfo Members 
    public string Error 
    { 
     get {throw new NotImplementedException(); } 
    } 

    public string this[string columnName] 
    { 
     get 
     { 
      string result = null; 
      if (columnName == "Text") 
      { 
       if (string.IsNullOrEmpty(Text)) 
       {result = "Mandatory field required"; } 
      } 
      if (columnName == "Text1") 
      { 
       if (string.IsNullOrEmpty(Text1)) 
       { result = "Mandatory field required"; } 
      } 
      return result; 

     } 

    } 

    #endregion 

Так что мой вопрос, как проверить обязательное поле для нескольких textBoxes без указания привязки один к одному (TextBox для метода getter и setter)?

Спасибо вам заранее!

+0

Как вы создания полей ввода (100 NOS) во время выполнения программы? Или вышеупомянутый xaml - это пользовательский элемент управления, который вы повторно используете? –

+0

привет, Джейкоб, в некотором смысле, что я имел в виду, что для Binding Path, все равно, чтобы получить значение из текста без указания метода get и set? – Sheep

+0

Что касается привязки, то каждый элемент в UI-TextBox должен быть привязан к одному свойству, он может быть одним и тем же или другим свойством. Это нормально, чтобы пройти через контролируемые элементы управления? но здесь вам может потребоваться указать валидацию для каждого элемента управления. –

ответ

0

Может быть, вы могли бы использовать Reflection для проверки значения строки

public string this[string columnName] 
{ 
    get 
    { 
     string result = null; 
     if (string.IsNullOrEmpty(this.GetType().GetProperty(columnName).GetValue(this) as string)) 
     { 
      result = "Mandatory field required"; 
     } 
     return result; 
    } 
}