我的ListView
ObservableCollection
为ItemsSource
。如何确保列表视图对单个集合项中的更改做出反应?
基本上,我想要一个项目交替背景的列表视图。当项目插入列表中间时,后台需要翻转背景。我发现的唯一方法是通过替换集合中的每个受影响的项目,这在iOS上转化为丑陋的视觉效果。我想重新绘制背景。
简单地绑定背景属性不起作用:没有关于属性更改的通知。
也许有办法向ListView
中的所有/部分可见行发送自定义通知?
答案 0 :(得分:1)
如果您有ObservableCollection<MyClass>
,则MyClass
需要实施INotifiyPropertyChanged,以便通知绑定的用户界面其属性已更改。
答案 1 :(得分:0)
我现在正在考虑的最佳方法是使用MessagingCenter。在集合更改时和消息进程上设置消息,根据项目的实际行进行后台更改。
此消息应在您用于向用户显示数据的ViewCell(或任何单元格)上实现。所以你可以这样做:
public MyViewCell()
{
MessagingCenter.Subscribe<object>(this as object, "UpdateBackground", (obj) =>
{
//Your logic to change background here
});
}
当您的集合发生变化时(在您的控制器上,ViewModel或后面的代码)发送消息以执行此代码
MessagingCenter.Send(this as object, "UpdateBackground");
我唯一担心的是,如果您订阅了大量消息(每个项目1个ViewCell)会影响内存,但我希望这会带来更好的选择。
我可以建议的另一件事是检查UITableView(iOS)和ListView(在Android上)并查看是否可以使用自定义渲染器实现此目的
祝你好运
修改强> 您还可以使用DataTemplateSelector来检测(取决于Item绑定到视图)ItemTemplate使用哪个。我知道该集合是否会更改DataTemplateSelector重绘或以某种方式回调&#34;刷新&#34;进入ListView并呈现新数据。如果确实如此,那就是我之前告诉你的更好的方法。我明天会试着为了好玩。