Я получаю сообщение об ошибке (но мой код все еще работает с ним, поэтому я игнорировал его до сих пор), говоря, что мой BindableListView is not usable as an object element because it is not public or does not define a public parameterless constructor or a type converter
.
Я предполагаю, что это является причиной другого брака sh Я получаю: System.ObjectDisposedException: Cannot access a disposed object. Object name: 'Xamarin.Forms.Platform.Android.FormsTextView'
, потому что я видел предложения онлайн, говорящие, что большую часть времени эта проблема связана с ListView, и что я должен установить CachingStrategy в RecycleElement.
Поэтому я решил наконец взглянуть на BindableListView и добавить в CachingStrategy = "RecycleElement"
Теперь уже реализован некоторый код, который, кажется, попробуйте добавить CachingStrategy уже:
BindableListView.cs:
namespace MyApp.Core.Controls
{
[PropertyChanged.DoNotNotify]
public class BindableListView : ListView
{
public static BindableProperty ItemClickedProperty = BindableProperty.Create(nameof(ItemClicked), typeof(ICommand), typeof(BindableListView));
public static BindableProperty ItemAppearsProperty = BindableProperty.Create(nameof(ItemAppears), typeof(ICommand), typeof(BindableListView));
public static BindableProperty AnimateScrollToSelectedItemProperty = BindableProperty.Create(nameof(AnimateScrollToSelectedItem), typeof(bool), typeof(BindableListView), true);
/// <summary>
/// Constructs a <see cref="BindableListView"/>
/// </summary>
/// <param name="cachingStrategy">Sets the caching strategy for the <see cref="ListView"/>.</param>
/// <example><![CDATA[
/// <controls:BindableListView>
/// <x:Arguments>
/// <ListViewCachingStrategy>RecycleElement</ListViewCachingStrategy>
/// </x:Arguments>
/// </controls:BindableListView>
/// ]]></example>
public BindableListView(ListViewCachingStrategy cachingStrategy)
: base(cachingStrategy)
{
ItemTapped += OnItemTapped;
ItemAppearing += OnItemAppearing;
ItemSelected += OnItemSelected;
...
Затем во всех файлах .xaml, которые используют этот ListView:
<controls:BindableListView
...>
<x:Arguments>
<ListViewCachingStrategy>RecycleElement</ListViewCachingStrategy>
</x:Arguments>
Будет ли это правильный способ установить CachingStrategy для Recycle Element? Если так, то как мне go исправить ошибки (я)?
Или я должен удалить параметр из конструктора в BindableListView.cs, чтобы сделать его без параметров, а затем просто добавить одну строку CachingStrategy = "RecycleElement"
? Я попробовал это, и ошибка, по крайней мере, исчезла (хотя приложение теперь не запускается, "отсутствует ctor по умолчанию"), но я не знаю, правильно ли это делать. Если это то, что я должен сделать, исправит ли это и мою вторую ошибку?
Спасибо!