Onclicking listview 单元格仅更改单击的单元格 xamarin 表单的内容
Posted
技术标签:
【中文标题】Onclicking listview 单元格仅更改单击的单元格 xamarin 表单的内容【英文标题】:Onclicking listview cell only change content of clicked cell xamarin forms 【发布时间】:2017-03-24 14:16:15 【问题描述】:我正在使用 listview 在 xamarin 表单中显示联系人号码。单击任何单元格时,我只想更改该特定单元格的内容。以下是我的代码:
lst_view.ItemSelected += async (object sender, SelectedItemChangedEventArgs e) =>
var con =(Contact)e.SelectedItem;
int index=contactList.IndexOf(con);
if (con.is_selected)
contactList[index].is_selected = false;
contactList[index].img = "";
else
contactList[index].is_selected = true;
contactList[index].img = "selected_checkbox.jpeg";
lst_view.ItemTemplate = new DataTemplate(typeof(ContactsItemCell));
;
它工作正常,但最后我提供了新的数据模板,即单击单元格整个列表视图重绘,这是令人讨厌的体验。我只想更新那个单元格,而不是整个列表视图。顺便说一句,我正在通过与 valueconverter 绑定来更改该单元格的图像。
【问题讨论】:
【参考方案1】:根据您显示的代码,有一种更简单的方法可以在不更改 ListView.ItemTemplate 的情况下执行此操作。看起来您正试图让 ListView 中的 SelectedItem 将其状态更改为显示复选框图像的“已选择”状态。
这应该通过使用 Xamarin.Forms.ViewCell 类中的 OnBindingContext 覆盖来完成。在此覆盖中,您可以访问 ViewCell 的 BindingContext,这是要显示的信息的模型。在这里,您应该检查“is_selected”属性并将图像设置为 ListView.ViewCell 以存储在应用程序中的适当图像。
要在 ItemSelected 中更新更改,您需要为 ListView 绑定到的 Collection 调用 OnPropertyChanged。您更改 SelectedItem 模型的方式是正确的,但您需要确保在数据源集合中发生这种情况。调用 OnPropertyChanged 将触发 Xamarin.Forms 从绑定源更新 ViewCell。
如果您需要显示完全不同的 ViewCell(不仅仅是更改所选图像),则不应在 ItemSelected 事件处理程序中更新 ListView 的 ItemTemplate,并且永远不应更改 ItemTemplate。您应该创建一个DataTemplateSelector。然后,您可以根据要显示的模型对象提供 DataTemplate。
我希望这会有所帮助!
披露:我为 Xamarin/Microsoft 工作
【讨论】:
谢谢,我是通过更改属性而不是重绘来做到这一点的。 另一种方法!太好了!以上是关于Onclicking listview 单元格仅更改单击的单元格 xamarin 表单的内容的主要内容,如果未能解决你的问题,请参考以下文章
将 UIView 动态添加到 UICollectionView 中的单元格仅适用于第一个单元格