سلام کاملا درسته امکان Bind کردن فیلد وجود ندارد.چون فیلد فاقد متد get هست پس امکان پیاده سازی اینترفیس INotifyPropertyChanged روی آن وجود ندارد.در DataBinding دو مفهوم Source (منبع دریافت اطلاعات)و Target(شی یا آبجکتی که از منبع اطلاعات را دریافت میکند) وجود دارد.اصولا مفهوم DataBinding به این صورت هست که در صورتی که در منبع دریافت اطلاعات، تغییری ایجاد شود به صورت اتوماتیک آبجکت(های) متصل به آن را از تغییرات باخبر کند.پس اگر بخواهیم پراپرتی های یک کلاس رو بصورت Bindable باشه بایداینترفیس INotifyPropertyChanged را روی ان پیاده سازی نماییم.
در کلاس Person دو شیوه پیاده سازی در حالت بدون Bindable و در حالت Bindable و نحوه پیاده سازی کلاس INotifyPropertyChanged دقت نمایید.
public class Person
{
public string PersonName {get;set;}
}
در حالت Bindable بصورت زیر پیاده سازی میشود که در این حالت پراپتی PersonName مکان Bind کردن به پراپرتی Text یک TextBox یا هر خاصیت از object های دیگر را داراست.
public class Person : INotifyPropertyChanged
{
private string name;
public event PropertyChangedEventHandler PropertyChanged;
public string PersonName
{
get { return name; }
set
{
name = value;
OnPropertyChanged("PersonName");
}
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
}
نحوه Bind کردن خاصیت Text یک TextBox بصورت کد بصورت زیر است.
var person=new Person();
textBoxPersonName.DataBindings.Add("Text",
person,
"PersonName",
false,
DataSourceUpdateMode.OnPropertyChanged);
در هر قسمتی که پراپرتی PersonName از آبجکت person شما تغییر نمایید خاصیت Text تکست باکس (textBoxPersonName) اتوماتیک تغییر خواهد کرد.