У меня есть кроссплатформенное приложение (iOS/Android), созданное в настоящее время на Xamarin, которому необходимо знать, какие элементы в представлении списка в данный момент видны. Он работает в Xamarin, но я не могу понять, как его перенести на Мауи. Разве для такой вещи не требуется код, специфичный для платформы в Мауи?
Вот соответствующие части Android/iOS, которые у меня были в Xamarin
Android:
Код: Выделить всё
List visibleItems = new List();
try
{
var renderer = lv.GetRenderer();
var nativeListView = renderer.View as Android.Widget.ListView;
for (int i = 0; i < nativeListView.ChildCount; i++)
{
var view = nativeListView.GetChildAt(i);
if (view.Visibility != ViewStates.Visible)
continue;
int pos = nativeListView.GetPositionForView(view);
if (pos < 0 || pos == AdapterView.InvalidPosition || pos >= nativeListView.Adapter.Count)
continue;
var obj = nativeListView.Adapter.GetItem(pos);
if (obj == null)
continue;
ViewerItemViewModel visibleElement = Cast(obj);
if (visibleElement != null && !visibleItems.Contains(visibleElement))
visibleItems.Add(visibleElement);
}
}
catch (Exception ex) {
}
return visibleItems;
Код: Выделить всё
var visibleItems = new List();
var array = lv.ItemsSource.OfType();
var renderer = lv.GetRenderer();
UITableView nativeListView = (UITableView)renderer.NativeView;
NSIndexPath[] index = nativeListView.IndexPathsForVisibleRows;
if (index != null)
for (int i = 0; i < index.Length; i++)
if (index[i].Row >= 0 && index[i].Row < array.Count())
visibleItems.Add(array.ElementAt(index[i].Row));
return visibleItems;
Источник: https://stackoverflow.com/questions/781 ... id-and-ios