点击列表视图单元格只改变点击单元格的内容Xamarin表单
我正在使用列表视图来显示xamarin表单中的联系人数量。在点击任何单元格时,我只想更改该特定单元格的内容。以下是我的代码:点击列表视图单元格只改变点击单元格的内容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));
};
它工作正常,但由于年底我在单击单元格全的ListView重绘提供了新的DataTemplate这就是和这恼人的经验。我只想更新该单元格,而不是整个listview。顺便点击我通过绑定valueconverter来更改该单元格的图像。
从您显示的代码中,可以更简单地完成此操作,而无需更改ListView.ItemTemplate。它看起来像您正试图让ListView中的SelectedItem将其状态更改为显示复选框图像的“Selected”状态。
这应该通过利用Xamarin.Forms.ViewCell类中的OnBindingContext重写来完成。在此覆盖中,您可以访问ViewCell的BindingContext,这是要显示的信息的模型。在这里,您应该检查“is_selected”属性并将图像设置为ListView.ViewCell以存储在应用程序中的相应图像。
要在ItemSelected中更新更改,您需要为ListView绑定的集合调用OnPropertyChanged。您更改SelectedItem模型的方式是正确的,但您需要确保在源数据集合中发生这种情况。调用OnPropertyChanged将触发Xamarin.Forms从绑定的源更新ViewCells。
如果您需要显示完全不同的ViewCell(不只是更改所选图像),则不应更新ItemSelected事件处理程序中ListView的ItemTemplate,并且不应更改任何ItemTemplate。你应该创建一个DataTemplateSelector。您可以根据要显示的模型对象提供一个DataTemplate。
我希望这有助于!
披露:我为Xamarin /微软工作
Thanx,我通过改变属性,而不是重绘。 –
另一种方法来做到这一点!大! – BrewMate