我現在想的最好的方法是使用MessagingCenter。當集合更改和消息處理根據項目的實際行進行背景更改時設置消息。
此消息應該在您用來向用戶呈現數據的ViewCell(或任何單元格)上實現。所以,你可以做這樣的事情:
public MyViewCell()
{
MessagingCenter.Subscribe<object>(this as object, "UpdateBackground", (obj) =>
{
//Your logic to change background here
});
}
而當你收集的變化(這是你的控制器,視圖模型或代碼背後)將消息發送給執行該代碼
MessagingCenter.Send(this as object, "UpdateBackground");
我唯一擔心的是,如果您訂閱了大量消息(每個項目有1個ViewCell)會影響內存,但我希望這會帶來更好的選擇。
其他的事情,我可以建議是檢查的UITableView(IOS)和ListView(在Android),看看你能做到這一點使用自定義渲染
問候
編輯: 你也可以使用DataTemplateSelector來檢測(取決於綁定到視圖的Item)哪個ItemTemplate使用。我知道如果集合更改DataTemplateSelector重繪或以某種方式回調ListView中的「刷新」並呈現新數據。如果是這樣,是我以前告訴過你的更好的方法。我明天會試試看,只是爲了好玩。
澄清 - 通過'MyClass'你的意思是'ObservableCollection'中的物品的類(即'ItemsSource = ObservableCollection')?另外 - 「INotifiyPropertyChanged」的實現應該做什麼? –
user1334767
是的,任何類包含在ObservableCollection中。 INotifyPropertyChanged記錄在鏈接的文章中,並且在SO中的其他地方以及遍佈整個網絡的1000個文檔中,因此我不打算在此處給出另一個完整的解釋。基本上,只要您的類的屬性更新,就會觸發PropertyChanged事件。 – Jason
謝謝 - 奇妙地工作! – user1334767