2015-08-14 3 views
2

Я создаю приложение, где мне нравится записывать некоторые байты в текстовое поле. Мне нравится проверять, действительно ли настоящий HEX-код написан в текстовое поле или нет, и напомнить пользователю, если нет.Проверка данных, записанных в TextBox, MVVM C#

Я никогда не делал это в MVVM и XAML. Как это сделать? Я нахожу несколько учебных пособий в Интернете, но проблема в том, что мне нравится писать 64 байта. У меня есть 64 текстовых поля, которые объединяются в один массив.

Один из текстового поля:

<TextBox Text="{Binding TB[4], UpdateSourceTrigger=PropertyChanged}" Grid.Column="0" Grid.Row="0" Style="{StaticResource byteTextBoxStyle}"/> 

и массив переменный:

private string[] _tb = new string[64]; 
    public string[] TB 
    { 
     get 
     { return _tb; } 
     set 
     { 
      _tb = value; 

      NotifyPropertyChanged("TB"); 
     } 
    } 

Цели в том, что красный TextBlock находится под все текстовые и писать красный (Something like that).

Я могу сделать это позже, когда нажата кнопка - объединить массив в одну строку и проверить с помощью регулярного выражения, что-то не в порядке. Но я хочу это в режиме реального времени, когда пользователь вводит текст и сразу распознает, нормально ли это или нет.

Обратитесь за помощью, потому что я новичок в MVVM и WPF. Если у вас возникли вопросы, спросите пожалуйста. Благодаря!

ответ

2

я сделал что-то подобное в прошлом, используя System.Windows.Interactivity.dll

https://www.nuget.org/packages/System.Windows.Interactivity.WPF/

Все это делает прекратить ключ вниз событие, если не шестнадцатеричное значение вводится с.

{ 

/// <summary> 
    /// Provides functionality to allow users to type only letters [0-9 A-F a-f]. 
    /// </summary> 
    public class HexEditTextBox : TriggerAction<DependencyObject> 
    { 
     protected override void Invoke(object parameter) 
     { 
      var textBox = this.AssociatedObject as TextBox; 
      if (textBox != null) textBox.PreviewKeyDown += HandlePreviewKeyDownEvent; 
     } 

     /// <summary> 
     /// Checks whether the input is a valid key for a Hex number. 
     /// Sets the 'Handled' Property as True if the input is invalid, so that further actions will not be performed for this Action. 
     /// </summary> 
     /// <param name="sender"></param> 
     /// <param name="e">KeyEventArgs instance</param> 
     private void HandlePreviewKeyDownEvent(object sender, KeyEventArgs e) 
     { 
      var acceptedKeys = new List<Key>() 
             { 
              Key.D0, Key.D1, Key.D2, Key.D3,Key.D4,Key.D5,Key.D6,Key.D7,Key.D8,Key.D9, 
              Key.A,Key.B,Key.C,Key.D,Key.E,Key.F, 
              Key.Tab,Key.Back,Key.Delete,Key.Left,Key.Right,Key.Up,Key.Down,Key.Enter,Key.Home,Key.End, 
              Key.NumPad0,Key.NumPad1,Key.NumPad2,Key.NumPad3,Key.NumPad4,Key.NumPad5,Key.NumPad6,Key.NumPad7,Key.NumPad8,Key.NumPad9 
             }; 

      e.Handled = !acceptedKeys.Contains(e.Key); 
     } 
    } 

} 

У вас должна быть возможность вставить свою валидацию здесь.

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