所以,我有項目列表(存儲在ObservableCollection中),如何通知項目的屬性更改?如何通知有關更改ListBox項目的屬性?
我有當前的解決方案:屬性也上升NotifyPropertyChanged(),它似乎工作。但是,有時,屬性發生了變化,但未通知視圖(調試器顯示私有字段包含新值,但屏幕仍顯示舊值)。也許這是更好的方式嗎?
編輯1:是的,綁定是在雙向模式下完成的。
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;
}
列表填寫虛擬機:
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爲null。
編輯5:所以,我剛剛重新啓動項目。那些已經更改的項目 - 它們仍然無法識別(PropertyChanged == null)。然而,其餘的工作正常。
編輯6:到目前爲止,問題是在
var foundItem = shoppingList.FirstOrDefault(p => p.ean == item.ean);
if (foundItem != null)
{
foundItem.Amount += 1;
}
發佈您的代碼,否則很難提供幫助。 –
@AlaaMasoud剛剛添加。有時它可以工作,但在某個時刻,它只是停止通知。我猜,導致PropertyChanged爲null。 –