数据绑定控件与字节数组C#中的字节

时间:2012-02-05 09:10:02

标签: c# winforms bytearray data-binding

我需要为字节数组中的一个字节绑定一个控件。例如,

byte[0]  -> bind with numericupdown1

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

这样当byte[0]发生变化时,numericupdown1中的值也会发生变化......

我能够将控件绑定到属性,但我无法使用字节数组

实现上述要求

请帮助我。

提前致谢

此致 宵

1 个答案:

答案 0 :(得分:2)

我不完全明白你的约束力以及在哪种技术/环境中,但是你绝对不能用数组做到这一点。 这是因为数组不会报告其元素何时发生变化。

如果您使用的是WPF或Silverlight,并且要将数组绑定到UI中的某种列表,请尝试使用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)并将显示该新值。

祝你好运!