だから、私はアイテムのリスト(ObservableCollectionに保存されています)を持っていますが、アイテムのプロパティの変更について通知する方法は?
私は現在の解決策を持っています:プロパティも上昇しています NotifyPropertyChanged(), そしてそれはうまくいくようです. ただし、プロパティが変更されても、ビューに通知されないことがあります (デバッガーはプライベート フィールドに新しい値が含まれていることを示しますが、画面にはまだ古い値が表示されます)。多分それはそれを行うためのより良い方法ですか?
EDIT1: はい、バインドは TwoWay モードで行われます。
EDIT2: PropertyChanged が null の場合があることがわかりました。なぜそれができるのですか?
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);
EDIT 4:いくつかのアイテムで機能することがわかりました。変更されていないこれらのアイテムは、正常に機能しています。しかし、私がそれを変更し始めたとき、ある瞬間、PropertyChanged は null です。
EDIT 5:だから、私はちょうどプロジェクトを再開しました。すでに変更されているアイテム - まだ通知できません (PropertyChanged == null)。ただし、残りは正常に機能しています。
編集6:これまでのところ、問題は
var foundItem = shoppingList.FirstOrDefault(p => p.ean == item.ean);
if (foundItem != null)
{
foundItem.Amount += 1;
}