Вот как я регистрирую его в своем MauiProgram.cs:
Код: Выделить всё
builder.Services.AddTransientPopup();
Код: Выделить всё
public async Task DisplayBottomPickerAsync(CancellationToken token = default)
where TViewModel : PickerBottomSheetViewModel
where TItem : IPickableItem
{
var result = await _popup.ShowPopupAsync(Shell.Current, GetOptions(true), token);
return result.WasDismissedByTappingOutsideOfPopup ? default : result.Result;
}
Код: Выделить всё
var result = await _popup.DisplayBottomPickerAsync(token);
Код: Выделить всё
public abstract partial class PickerBottomSheetViewModel : ViewModelBase
public abstract partial class PickerBottomSheetViewModel : PickerBottomSheetViewModel where T : IPickableItem
public sealed partial class BaitPickerViewModel : PickerBottomSheetViewModel
{
private readonly SqliteStorage _sql;
private readonly ILocalizationResourceManager _lang;
public BaitPickerViewModel(PopupHost popup, SqliteStorage sql, ILocalizationResourceManager lang) : base(popup)
{
_sql = sql; //Never called
_lang = lang;
Title = _lang["SelectBaitTitle"];
AddNewText = _lang["AddNewBait"];
CanEditOrDelete = true;
}
protected override IAsyncEnumerable LoadTypedItemsAsync(CancellationToken token) => _sql.EnumerateBaitsAsync(token);
protected override Task AddTypedItemAsync(CancellationToken token) => base.AddTypedItemAsync(token);
protected override Task EditTypedItemAsync(Bait item, CancellationToken token) => base.EditTypedItemAsync(item, token);
protected override Task DeleteTypedItemAsync(Bait item, CancellationToken token) => base.DeleteTypedItemAsync(item, token);
}
Код: Выделить всё
public sealed partial class PickerBottomSheet : Popup
{
public PickerBottomSheet()
{
InitializeComponent();
}
}
Код: Выделить всё
Изменить
Если я передаю BaitPickerViewModel непосредственно в PickerBottomSheet, это работает. Но это нежизнеспособное решение, так как тогда я не смогу использовать другие модели представления, в этом и весь смысл этой конструкции.
Также передача PickerBottomSheetViewModel невозможна, поскольку она абстрактна.