روش بایندینگ در wpf بدین صورته که باید کلاستون رو تزیین کنید و کمی اونها رو تغییر بدید یجوری هوشمندش کنید
ایترفیس استاندارد INotifyPropertyChanged برای همین کار هست در فضای نام System.ComponentModel بهش دسترسی داریم
فرض کنیم کلاسی داریم بنام Person با دو فیلدهای نام و نام خانوادگی
public class Person : INotifyPropertyChanged
{
private string _firstName;
private string _lastName;
public string FirstName
{
set
{
_firstName = value;
if (PropertyChanged == null) return;
onPropertyChanged("FirstName");
}
get { return _firstName; }
}
public string LastName
{
set
{
_lastName = value;
if (PropertyChanged == null) return;
onPropertyChanged("LastName");
}
get { return _lastName; }
}
public event PropertyChangedEventHandler PropertyChanged;
private void onPropertyChanged(string propertyName)
{
if (PropertyChanged == null) return;
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
به محض ارث بری از INotifyPropertyChanged یک event و متد PropertyChangedEventHandler برای هوشمند کردن پروپرتیهای کلاسمون پیاده سازی میشه که باید کمی تغییرات مثل مثال بالا درونش بدیم
خب برای اینکه بخایم یک لیست از کلاس person بسازیم کافیه توی کد برنامه یا( اگر پترن MMVM استفاده میکنید در یک ViewModel) یک Prop از نوع جنریک ObservableCollection میسازیم
private ObservableCollection<Person> _personss;
public ObservableCollection<Person> Persons
{
get { return _personss; }
set
{
if (_personss!= value)
{
_personss= value;
onPropertyChanged("persons");
}
}
}
دقت کنید لیست جنریک هم با onPropertyChanged در قسمت set پراپرتی هوشمند شده البته میتونید یک پراپرتی ساده هم بسازید
public ObservableCollection<Person>Persons{get;set;}
ولی این کار باعث میشه که وقتی لیست Persons هوشمند نیاشه و باید بعد از پر کردن لیست یک دستور دیگه بنویسیم
در این کلاستون هم فراموش نکنید که از اینترفیس INotifyPropertyChanged ارث بری بشه و پیاده سازی بشه
حالا کافیه در یک متد یا در سازنده کلاس این لیست مقدار دهی بشه
public class PerdonViewModel : INotifyPropertyChanged
{
private ObservableCollection<Person> _personss;
public ObservableCollection<Person> Persons
{
get { return _personss; }
set
{
if (_personss!= value)
{
_personss= value;
onPropertyChanged("persons");
}
}
}
public PersonViewModel()
{
people = new ObservableCollection<Persons>
{
new Person { FirstName = "ali", LastName = "ebrahimi" },
new Person { FirstName = "reza", LastName = "rezaii" },
new Person { FirstName = "Amir", LastName = "ebrahimi" },
};
}
حالا این لیست رو میتونید در قسمت xaml بایند کنید به یک گراید