数据绑定自定义控件

时间:2009-03-03 16:41:16

标签: c# winforms controls

我有一个自定义控件(Windows窗体),它是一个查找文本框。 Control上的属性是Current Selection,它是包含“Identifier”,“Code”和“Description”的自定义对象。此属性是使用BindingSource的数据绑定。

显示信息效果很好。另一方面,无论我将Update设置为OnValidate还是OnValueChange,它都不会更新BindingSource。是否有一些我不想让它自动更新?

private System.Windows.Forms.BindingSource buildPlanComponentDataBindingSource;

    public void LoadBuildPlan(string itemNumber)
    {
        var buildPlanComponents = BuildPlan.LoadBuildPlanComponents(itemNumber, AutomaticPrice);
        buildPlanComponentDataBindingSource.DataSource = buildPlanComponents;
        AssemblyNumber = itemNumber;
    }




[Bindable(true)]
[DefaultValue(null)]
public ILookupSelection CurrentSelection
{
    get
    {
        if (currentSelection == null)
            currentSelection = new LookupSelection {Code = txtLookup.Text};

        return currentSelection;
    }

    set
    {
        if (value == null) return;

        currentSelection = value;

        SetText(currentSelection, DisplayText);
        SetDescription(currentSelection, DisplayDescription);
    }
}

3 个答案:

答案 0 :(得分:2)

实施INotifyPropertyChanged似乎是解决方案!

    #region IPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
    }

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        if (null != PropertyChanged)
        {
            PropertyChanged(this, e);
        }
    }

    #endregion

答案 1 :(得分:0)

  

显示信息有效   大。另一方面无论如何   我是否将Update更新为OnValidate   或者OnValueChange它永远不会更新   BindingSource的。

看看你的代码,我实际上并不确定。在你的集合中,你测试null和放弃;如果数据实际上包含null(这是您所描述的),您的控件将不同步。我想知道这个检查是否掩盖了潜在的问题。

答案 2 :(得分:0)

也许您需要让DataBinding为每个以这种方式设置其值的控件写入其值?

假设一个名为txtMySetValue的文本框的数据绑定:

txtMySetValue.DataBindings [0] .WriteValue();