我有一个自定义控件(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);
}
}
答案 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();