【问题标题】:Onclicking listview cell only change content of clicked cell xamarin formsOnclicking listview 单元格仅更改单击的单元格 xamarin 表单的内容
【发布时间】:2023-03-19 21:11:02
【问题描述】:

我正在使用 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 绑定来更改该单元格的图像。

【问题讨论】:

    标签: listview xamarin.forms


    【解决方案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 工作

    【讨论】:

    • 谢谢,我是通过更改属性而不是重绘来做到这一点的。
    • 另一种方法!太好了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多