PDA

View Full Version : امکان DataBinding در Property ها



reza1371
پنج شنبه 03 فروردین 1396, 18:50 عصر
سلام دوستان.
تفاوت پراپرتی و فیلد رو میخوندم . نوشته بود که :
همچنین امکان DataBind به Property وجود دارد ولی در Field این امکان موجود نیست.

میشه راهنمایی کنید بگید منظورش چیه ؟
دیتابایند به پراپرتی یعنی چه ؟
منظور از منبع تو دیتابایندیگ چیه ؟

danialafshari
پنج شنبه 03 فروردین 1396, 19:54 عصر
با سلام
اگه اشتباه نکنم منظورش اینه که
اگر شما آبجکت TextBox رو در نظر بگیرید property هایی از قبیل text و... داره که در قسمت databinding میشه text رو به یک فیلد از بانک اطلاعاتی بایند یا متصل کرد

ژیار رحیمی
پنج شنبه 03 فروردین 1396, 21:55 عصر
سلام کاملا درسته امکان 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) اتوماتیک تغییر خواهد کرد.

reza1371
جمعه 04 فروردین 1396, 03:07 صبح
نه منظور تو شی گرایی هست .

reza1371
جمعه 04 فروردین 1396, 03:08 صبح
بسیار کامل و عالی . ممنون