如何从视图模型 Xamarin 窗体访问工具栏项



我试图从视图模型的工具栏项中设置padge 我有一个名为IToolbarItemBadgeService的接口

public interface IToolbarItemBadgeService
{
void SetBadge(Page page, ToolbarItem item, string value, Color backgroundColor, Color textColor);
}

我想在注册接口后在工具栏项中设置徽章,我使用了此代码,但它抛出了异常

private IToolbarItemBadgeService _toolbarItemBadge;

并在构造函数

public MainTabPageViewModel(IToolbarItemBadgeService toolbarItemBadge)
{
_toolbarItemBadge = toolbarItemBadge;
_toolbarItemBadge.SetBadge(MainTabPage.Main,MainTabPage.Main.ToolbarItems.FirstOrDefault() , $"{BaseService.CartCounter}", Color.Orange, Color.White);
}

抛出异常

Unity.Exceptions.ResolutionFailedException: 解决 依赖项失败,类型 = 'System.Object',name = 'MainTabPage'。 在以下情况下发生异常:调用构造函数 LGMobileApp.Views.MainTabPage((.例外情况是: 解决方案失败异常 - 依赖项的解析失败,键入 = 'LGMobileApp.ViewModels.MainTabPageViewModel', name = '(none('.在以下情况下发生异常:调用构造函数 LGMobileApp.ViewModels.MainTabPageViewModel(Prism.Navigation.INavigationService navigationService, LGMobileApp.Helpers.IToolbarItemBadgeService 工具栏项目徽章(。异常为:空引用异常 - 对象 引用未设置为对象的实例。

从异常中,您可以看到您的服务未注册,无法解析。

您需要注册您的IToolbarItemBadgeService接口,并在RegisterTypes方法中App.cs内部实现。

像这样:

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.Register<IToolbarItemBadgeService, ToolbarItemBadgeService>();
// .. Other registration code
}

在此之后,您将能够使用 注入IToolbarItemBadgeServiceMainTabPageViewModel.

祝您在编码方面好运!

最新更新