2016-11-10 127 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

相關問題