ربط البيانات عنصر تحكم مخصص
سؤال
ولدي تحكم مخصص (نموذج Windows) الذي هو مربع نص البحث. خاصية بشأن التحكم هو اختيار الحالي الذي هو كائن مخصص تحتوي على "معرف"، "كود" و "الوصف". هذه الخاصية هي ربط بيانات يستخدم BindingSource.
وعرض المعلومات يعمل بشكل ممتاز. من ناحية أخرى بغض النظر عن ما إذا كان تعيين تحديث ل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);
}
}
المحلول
وتنفيذ 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
نصائح أخرى
وعرض أعمال المعلومات عظيم. من ناحية أخرى بغض النظر عن سواء أنا وضعت تحديث لOnValidate أو OnValueChange فإنه يقوم بتحديث أبدا BindingSource.
اقتباس فقرة>وعند النظر إلى التعليمات البرمجية انا فعلا لست متأكدا من ذلك. في مجموعة الخاص بك، يمكنك اختبار لاغية والتخلي. إذا كانت البيانات يحتوي في الواقع فارغة (وهو ما كنت تصف) سوف يكون التحكم الخاصة بك من التوافق. وأتساءل عما إذا ربما أن الاختيار يتم اخفاء المشكلة الأساسية.
وربما تحتاج للتسبب في ربط البيانات لكتابة قيمته مقابل كل عنصر التحكم الذي كنت تقوم بهذه الطريقة القيمة؟
وعلى افتراض بيانات واحدة ملزمة لنص اسمه txtMySetValue:
وtxtMySetValue.DataBindings [0] .WriteValue ()؛