Привязка данных к элементу управления с байтом в байтовом массиве C # - PullRequest
1 голос
/ 05 февраля 2012

Мне нужно связать элемент управления для байта в байтовом массиве.Например,

byte[0]  -> bind with numericupdown1

byte[2] -> bind withe numericupdown3
.
.
.

, поэтому при изменении byte[0] значение в numericupdown1 также изменяется ...

Я могу привязать элементы управления к свойству, но я могНе удается выполнить вышеупомянутое требование с байтовым массивом

Пожалуйста, помогите мне в этом.

Заранее спасибо

С уважением, Иша

1 Ответ

2 голосов
/ 05 февраля 2012

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

Если вы находитесь в WPF или Silverlight и привязываете свой массив к какому-то списку в пользовательском интерфейсе, попробуйте использовать ObservableCollection.

Если вы находитесь в WinForms и просто привязываете элементы вручную к некоторым элементам управления, вам нужно будет создать оболочки для каждого элемента. Это просто: просто создайте простой класс, такой как:

public sealed class ValueWrapper : INotifyPropertyChanged
{
  public event PropertyChangedEventHandler PropertyChanged;

  public ValueWrapper(byte initialValue) {
     _value = initialValue;
  }      

  private byte _value;
  public byte Value {
     get { return _value; }
     set { 
        _value = value;
        OnPropertyChanged("Value");
     }
  }

  private void OnPropertyChanged(String name)
  {
    if (PropertyChanged != null)
        PropertyChanged(this, new PropertyChangedEventArgs(name));
  }
}

Теперь вы хотите преобразовать ваш массив байтов в массив упаковщиков. Это тривиально, если вы используете LINQ:

var values = myBytes.Select(x=>new ValueWrapper(x)).ToArray();

Теперь, связать свойства Value объектов-оболочек, а не байтов (используя класс Binding)

А при изменении этих значений:

values[0].Value = 122;

Ваш пользовательский интерфейс отразит это изменение (из-за INotifyProperyChanged) и покажет это новое значение.

Удачи!

...