通知ListView项目中的更改

时间:2017-06-17 21:30:25

标签: listview xamarin.ios xamarin.forms

我的ListView ObservableCollectionItemsSource。如何确保列表视图对单个集合项中的更改做出反应?

基本上,我想要一个项目交替背景的列表视图。当项目插入列表中间时,后台需要翻转背景。我发现的唯一方法是通过替换集合中的每个受影响的项目,这在iOS上转化为丑陋的视觉效果。我想重新绘制背景。

简单地绑定背景属性不起作用:没有关于属性更改的通知。

也许有办法向ListView中的所有/部分可见行发送自定义通知?

2 个答案:

答案 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并呈现新数据。如果确实如此,那就是我之前告诉你的更好的方法。我明天会试着为了好玩。