private void ToExpandTappedItem(Contact ItemData) { if (tappedItem != null && tappedItem.IsVisible) { var previousIndex = listview.DataSource.DisplayItems.IndexOf(tappedItem); tappedItem.IsVisible = false; if (Device.RuntimePlatform != Device.macOS) { Device.BeginInvokeOnMainThread(() => { listview.RefreshListViewItem(previousIndex, previousIndex, false); }); } } if (tappedItem == ItemData) { if (Device.RuntimePlatform == Device.macOS) { var previousIndex = listview.DataSource.DisplayItems.IndexOf(tappedItem); Device.BeginInvokeOnMainThread(() => { listview.RefreshListViewItem(previousIndex, previousIndex, false); }); } tappedItem = null; return; } tappedItem = ItemData; tappedItem.IsVisible = true; if (Device.RuntimePlatform == Device.macOS) { var firstIndex = visibleLines[visibleLines.FirstBodyVisibleIndex].LineIndex; var lastIndex = visibleLines[visibleLines.LastBodyVisibleIndex].LineIndex; Device.BeginInvokeOnMainThread(() => { listview.RefreshListViewItem(firstIndex, lastIndex, false); }); } else { var currentIndex = listview.DataSource.DisplayItems.IndexOf(ItemData); Device.BeginInvokeOnMainThread(() => { listview.RefreshListViewItem(currentIndex, currentIndex, false); }); } }