2016-11-10 126 views
0

我正在使用列表视图来显示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来更改该单元格的图像。

回答

1

从您显示的代码中,可以更简单地完成此操作,而无需更改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 /微软工作

+0

Thanx,我通过改变属性,而不是重绘。 –

+0

另一种方法来做到这一点!大! – BrewMate

相关问题