单击列表视图单元格仅更改单击的单元格xamarin表单的内容

时间:2016-11-10 14:04:05

标签: listview xamarin.forms

我使用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));
        };

它工作正常,但最后我给新的datatemplate点击单元格整个listview重绘,这是烦人的经验。我只是想更新那个单元格,而不是整个列表视图。顺便点一下,我正在通过与valueconverter绑定来更改该单元格的图像。

1 个答案:

答案 0 :(得分:1)

从您显示的代码中,有一种更简单的方法可以在不更改ListView.ItemTemplate的情况下执行此操作。看起来你正试图让ListView中的SelectedItem将它的状态改为" Selected"显示复选框图像的状态。

这应该通过利用Xamarin.Forms.ViewCell类中的OnBindingContext覆盖来完成。在此覆盖中,您可以访问ViewCell的BindingContext,它是要显示的信息的模型。在这里你应该检查" is_selected"属性并将Image设置为ListView.ViewCell,以存储在应用程序中的相应图像。

要在ItemSelected中更新更改,您需要为ListView绑定的Collection调用OnPropertyChanged。您更改SelectedItem模型的方式是正确的,但您需要确保在源数据集合中发生这种情况。调用OnPropertyChanged将触发Xamarin.Forms从绑定源更新ViewCells。

如果您需要显示完全不同的ViewCells(而不仅仅是更改所选图像),则不应在ItemSelected事件处理程序中更新ListView的ItemTemplate,并且不应该更改ItemTemplate。您应该创建一个DataTemplateSelector。您可以根据要显示的模型对象提供DataTemplate。

我希望这有帮助!

披露:我为Xamarin / Microsoft工作