我现在想的最好的方法是使用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