كيفية تحديث بسيط ربط عنصر تحكم نماذج Windows؟

StackOverflow https://stackoverflow.com/questions/411457

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا ملزم مجال الكائنات الملكية إلى الخاصية Text لSystem.Windows.Forms.Label باستخدام DataBindings:

Label l = new Label();
l.DataBindings.Add(new Binding("Text",myDomainObject,"MyProperty"));

ولكن، عندما أقوم بتغيير كائن المجال، لا يعكس تسمية التغيير. وأنا أعلم أن لضوابط معقدة مثل داتاغريدفيف، ملزمة يمكن القيام به مع BindingSource التي يمكن أن أدعو ResetBindings، ولكن لم أجد أي طريقة لتحديث ملزمة في حالة بسيطة من تسمية.

هل كانت مفيدة؟

المحلول

وكائن المجال الخاص بك ينبغي أن تنفذ INotifyPropertyChanged حتى أن يعرف الربط عند تغيير الخاصية الأساسية.

نصائح أخرى

وكينت لديه الجواب الصحيح، ولكن أريد أن إضافة القليل من طعام شهي على تطبيق واجهة INotifyPropertyChanged.

لرفع الحدث بسهولة حاول هذا

protected void OnPropertyChanged<T>(Expression<Func<T>> property)
{
    if (this.PropertyChanged != null)
    {
        var mex = property.Body as MemberExpression;
        string name = mex.Member.Name;
        this.PropertyChanged(this, new PropertyChangedEventArgs(name));
    }
}

ووتطبيقه مثل

{ // inside some method or property setter
    OnPropertyChanged(() => this.MyProperty);
}

والسبب الوحيد وهذا هو أفضل من تحديد الملكية بالاسم، هو أنه إذا كنت ريفاكتور، أو مجرد تغيير اسم الخاصية لن تضطر لتغيير implentation يدويا، ولكن يمكن السماح للمترجم إعادة تسمية كافة المراجع تلقائيا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top