我正在使用 Nuget CommunityToolkit.Maui.Views。我的毛伊岛应用程序我也使用 viewModels。现在我想通过 viewmodel 方法显示我的自定义对话框。但
this.ShowPopup(new DialogPopup());
Run Code Online (Sandbox Code Playgroud)
只能在 Page 对象上调用。
我可以将值 Page 分配给 viewModel 中的属性,但我不确定这是实现它的最佳选择:
private readonly MainViewModel _mainViewModel;
public MainPage(MainViewModel vm)
{
InitializeComponent();
BindingContext = vm;
_mainViewModel = vm;
_mainViewModel.Page = this;
}
Run Code Online (Sandbox Code Playgroud)
并在视图模型中
public Page Page { get; set; }
Run Code Online (Sandbox Code Playgroud)
和
Page.ShowPopup(new DialogPopup());
Run Code Online (Sandbox Code Playgroud)
ShowPopup 方法如下所示:
public static void ShowPopup<TPopup>(this Page page, TPopup popup) where TPopup : Popup {...}
Run Code Online (Sandbox Code Playgroud)
我应该如何实现它才能在我的视图模型中使用此 ShowPupup 方法?
我正在使用 Net 7.0 和依赖注入来初始化我的对象。
本讨论中描述了这样做的一种方法。您基本上可以将弹出窗口的显示包装在服务中。
public interface IPopupService
{
void ShowPopup(Popup popup);
}
Run Code Online (Sandbox Code Playgroud)
public class PopupService : IPopupService
{
public void ShowPopup(Popup popup)
{
Page page = Application.Current?.MainPage ?? throw new NullReferenceException();
page.ShowPopup(popup);
}
}
Run Code Online (Sandbox Code Playgroud)
MauiProgram.csservices.AddTransient<IPopupService, PopupService> ();
Run Code Online (Sandbox Code Playgroud)
public MainViewModel(IPopupService popupService)
{
this.popupService = popupService;
}
// and then somewhere (probably in a Command)...
popupService.ShowPopup(popup);
Run Code Online (Sandbox Code Playgroud)
我们还致力于在工具包本身中添加类似的内容,以便您不必在项目中自己编写这些内容。您可以在此处跟踪进度。
| 归档时间: |
|
| 查看次数: |
6531 次 |
| 最近记录: |