将POCO绑定到UserControl

时间:2009-02-08 15:00:35

标签: .net data-binding poco

您好我正在编写我的第一个.net gui。我想知道是否有一些特定的方法我需要应用于我的poco对象,以便它们可绑定到usercontrol。我有一些对象,但我似乎无法将它们绑定到我的usercontrol。

我在某处读到了他们需要实现IBindable但我无法摆脱某人已经消除了我必须输入到我所有类中的所有重复代码的感觉。有没有办法轻松绑定这些或我将不得不使用数据集等,以轻松地使此绑定工作。我对数据集极度厌恶,请提出其他一些不错的选择; - )

我正在尝试从devexpress工具包绑定到usercontrol。

3 个答案:

答案 0 :(得分:1)

哪种架构?

对于单向绑定,除了公共属性之外,您不需要任何其他内容 - 对于任何定制数据类型(TypeConverter等),可能需要一些struct实现。

对于完整的双向绑定,您需要一个事件实现 - 任何一个:

  • 每个属性“Foo”
  • 的“公共事件EventHandler FooChanged”
  • 一个`INotifyPropertyChanged实现
  • 一个定制的组件模型(不要去那里 - 矫枉过正)

有关INotifyPropertyChanged实现的示例(请注意,您可能希望移动一些代码以便重复使用):

public class Foo : INotifyPropertyChanged
{
    private string bar;
    public string Bar
    {
        get { return bar; }
        set { UpdateField(ref bar, value, "Bar"); }
    }
    // other properties...

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null) PropertyChanged(this,
            new PropertyChangedEventArgs(propertyName));
    }
    protected bool UpdateField<T>(ref T field, T value,
        string propertyName)
    {
        if (!EqualityComparer<T>.Default.Equals(field, value))
        {
            field = value;
            OnPropertyChanged(propertyName);
            return true;
        }
        return false;
    }
}

要绑定数据(网格等),最简单的方法是使用泛型;基本上, minumum IList - 但您从public T this[int index]索引器获得了额外的元数据 - List<T>Collection<T>等都有。更多 - BindingList<T>实现IBindingList允许基于收集的通知事件(但仅限INotifyPropertyChanged - 而不是FooChanged模式)。

答案 1 :(得分:0)

使用WPF,您需要INotifyPropertyChangedDependency Properties。另请查看INotifyCollectionChanged的集合。

答案 2 :(得分:0)

BindingList可用于绑定到通用对象列表。