15 EYLÜL 2009, Salı
ObservableCollection bu Madde değiştiğinde değil fark (bile)INotifyPropertyChanged
herkes bu kod neden çalışmıyor: biliyor mu
public class CollectionViewModel : ViewModelBase {
public ObservableCollection<EntityViewModel> ContentList
{
get { return _contentList; }
set
{
_contentList = value;
RaisePropertyChanged("ContentList");
//I want to be notified here when something changes..?
//debugger doesn't stop here when IsRowChecked is toggled
}
}
}
public class EntityViewModel : ViewModelBase
{
private bool _isRowChecked;
public bool IsRowChecked
{
get { return _isRowChecked; }
set { _isRowChecked = value; RaisePropertyChanged("IsRowChecked"); }
}
}
PS: ViewModelBase containts RaisePropertyChanged vb her şey. ve bu sorun başka.. her şey için işe yarıyor
CEVAP
10 Mart 2011, PERŞEMBE
-Tüm sınıflar alt ObservableCollection ve bir liste öğesi üzerinde bir özellik değiştiğinde aslında bir Reset eylem başlatan açılan bir sınıf. Tüm öğeleri INotifyPropertyChanged
uygulamak için zorlar.
Burada parası bu sınıf için veri bağlama olabilir ve tüm bağlantıları maddenin özelliklerini değişiklikleri ile güncellenir.
public sealed class TrulyObservableCollection<T> : ObservableCollection<T>
where T : INotifyPropertyChanged
{
public TrulyObservableCollection()
{
CollectionChanged = FullObservableCollectionCollectionChanged;
}
public TrulyObservableCollection(IEnumerable<T> pItems) : this()
{
foreach (var item in pItems)
{
this.Add(item);
}
}
private void FullObservableCollectionCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null)
{
foreach (Object item in e.NewItems)
{
((INotifyPropertyChanged)item).PropertyChanged = ItemPropertyChanged;
}
}
if (e.OldItems != null)
{
foreach (Object item in e.OldItems)
{
((INotifyPropertyChanged)item).PropertyChanged -= ItemPropertyChanged;
}
}
}
private void ItemPropertyChanged(object sender, PropertyChangedEventArgs e)
{
NotifyCollectionChangedEventArgs args = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, sender, sender, IndexOf((T)sender));
OnCollectionChanged(args);
}
}
Bunu Paylaş:
ObservableCollection Değil't AddR...
Resharper "proje bile sembol gide...
ObservableCollection ve BindingList ar...
Neden't Internet Explorer 11 Inte...
Vs vs SOL BİRLEŞİM NULL DEĞİL'ler...