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 中的单元格仅适用于第一个单元格

如何使单元格仅在填充后才能读取?数据网格视图 C#

excel提示不可读取内容,恢复后,某行单元格仅显示公式不计算,怎么办,求大神!

Android DatePicker仅更改为月份和年份