Когда я когда-либо добавить новый элемент в ObservableCollection
CollectionChanged
случае работает отлично,ObservableCollection CollectionChanged событие problum
Вот MVVM код
public List<BOMForDesignMasterModel> BOMCollection { get; set; }
public ObservableCollection<BOMForDesignMasterModel> BOM
{
get { return _BOM; }
set
{
_BOM = value;
NotifyPropertyChanged("BOM");
BOM.CollectionChanged += BOM_CollectionChanged;
}
}
public DesignMasterModel DesignMaster
{
get
{
return _DesignMaster;
}
set
{
if (value != null)
{
_DesignMaster = value;
BOM.Clear();
BOM = new ObservableCollection<BOMForDesignMasterModel>(BOMCollection.Where(x => x.DesignMasterId == value.DesignMasterId));
NotifyPropertyChanged("DesignMaster");
}
}
}
void BOM_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null)
foreach (BOMForDesignMasterModel item in e.NewItems)
item.PropertyChanged += item_PropertyChanged;
if (e.OldItems != null)
foreach (BOMForDesignMasterModel item in e.OldItems)
item.PropertyChanged -= item_PropertyChanged;
}
public String TotalWeight { get { return _TotalWeight; } set { _TotalWeight = value; NotifyPropertyChanged("TotalWeight"); } }
void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "Weight")
{
TotalWeight = BOM.Sum(x => x.Weight).ToString();
}
}
Здесь я использую коллекцию копирования на основе состояния,
BOM = new ObservableCollection<BOMForDesignMasterModel>(BOMCollection.Where(x => x.DesignMasterId == value.DesignMasterId));
, когда мне понравился этот пункт_PropertyChanged event not work скопированных элементов.
Как исправить эту проблему?
вы на самом деле регистрирующий для BOM_CollectionChanged где-нибудь? я не вижу этого, но вы, очевидно, не включили инструментальные части кода. –
Почему все регистрируются. В наборе BOMForDesignMasterModel Weight просто вызывайте NotifyPropertyChanged («TotalWeight»); И попросите рассчитать общий вес. – Paparazzi
@SamAlex не уверен, что я понимаю вашу проблему, но когда вы создаете список, он не будет вызывать событие 'CollectionChanged' для элементов, которые вы передаете в конструкторе, потому что a) ему не нужно: b) обработчик событий CollectionChanged не назначен. В основном в установщике свойства «BOM», где вы назначаете обработчик «CollectionChanged», список уже полностью создан и содержит в нем начальные элементы. – dkozl