所以,我有项目列表(存储在 ObservableCollection 中),如何通知项目的属性变化?
我有当前的解决方案:属性也在上升 NotifyPropertyChanged(),它似乎有效。但是,有时,属性被更改,但没有通知给视图(调试器显示私有字段包含新值,但屏幕显示仍然是旧值)。也许这是更好的方法?
EDIT1:是的,绑定是在双向模式下完成的。
EDIT2:刚刚发现有时 PropertyChanged 为空。为什么会这样?
EDIT3:代码非常基本。我正在使用非常常见的 NotifyPropertyChanged()
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void NotifyPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}
二传手:
public double Amount
{
get
{
return amount;
}
set
{
amount = value;
NotifyPropertyChanged("Amount");
}
}
模型是继承的(刚发现可能有问题)
public class Item : INotifyPropertyChanged
变更金额:
var foundItem = shoppingList.FirstOrDefault(p => p.ean == item.ean);
if (foundItem != null)
{
foundItem.Amount += 1;
}
填写VM列表:
public class MyViewModel : BaseFoodieViewModel
{
private ObservableCollection<ProductSearchCategoryCollection<Item>> _itemsList = new ObservableCollection<ProductSearchCategoryCollection<Item>>();
public ObservableCollection<ProductSearchCategoryCollection<Item>> ItemsList
{
get { return _itemsList; }
set { Set(() => ItemsList, ref _itemsList, value); }
}
****
ItemsList.Clear();
var list = from item in parsedList
group item by item.code
into it orderby it.Key
select new ProductSearchCategoryCollection<Item>(it.Key, it);
ItemsList = new ObservableCollection<ProductSearchCategoryCollection<Item>>(list);
编辑 4:刚刚发现,它适用于多个项目。那些没有改变的项目 - 它们工作正常。但是当我开始改变它时,有一刻,PropertyChanged 为空。
编辑5:所以,我刚刚重新启动了项目。那些已经更改的项目 - 它们仍然无法通知(PropertyChanged == null)。但是,其余的工作正常。
编辑6:到目前为止,问题出在
var foundItem = shoppingList.FirstOrDefault(p => p.ean == item.ean);
if (foundItem != null)
{
foundItem.Amount += 1;
}