如何关闭 ViewModel 中的 49.maui.BottomSheet?

问题描述 投票:0回答:1

所以我做了一些搜索,尝试询问 ChatGPT,并尝试了几种不同的方法,但我一生都无法让底部的工作表消失。

我有一个名为 CategoryItemPage 的页面,它有自己的 ViewModel,名为 CategoryItemViewModel,它通过 DI 传递到代码隐藏。此外,我正在请求 ItemBottomSheet 的瞬态实例。 ItemBottomSheet 扩展了 BottomSheet 并请求注入自己的 ViewModel。 ItemBottomSheet 并有多个条目和一个“保存”按钮。

现在,CategoryItemViewModel中有一个命令,它使用bottomSheet.ShowAsync()显示ItemBottomSheet;

底部工作表中的“保存”按钮绑定到其自己的 ViewModel,我正在这样做:

<the49:BottomSheet xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:the49="https://schemas.the49.com/dotnet/2023/maui"
             xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"       
             x:Class="MyApp.Controls.ItemBottomSheet"
             HasHandle="True"
             x:Name="ItemSheet">

...

<Button Text="{Binding ButtonText}" Grid.Row="7" Grid.Column="1" Grid.ColumnSpan="2" Margin="0,10,0,0" Command="{Binding OnSaveCommand}" CommandParameter="{Binding Source={x:Reference ItemSheet}}"/>

在 ItemBottomSheetViewModel 中,我有以下内容:

public ICommand OnSaveCommand { get; set; }

...

OnSaveCommand = new Command<ItemBottomSheet>(OnSave); // This is set in the constructor

...

private async void OnSave(ItemBottomSheet bs)
{
  // Validation
  await _db.SaveChangesAsync();
  bs.DismissAsync(false);
}

底部的表格只是拒绝驳回,我不明白为什么。有人能看到我做错了什么吗?

另外我也尝试过:

将 ItemBottomSheet 设置为服务并将其注入到 CategoryItemViewModel 和 ItemBottomSheetViewModel 中 - 但这会创建循环依赖性。

将 ItemBottomSheetViewModel 存储在后面的代码中,并将 XAML Clicked 指向后面代码中的一个方法,该方法调用视图模型上的 save 并尝试自行关闭,但这也不起作用。

预先感谢您对此的任何建议!

c# xaml maui bottom-sheet
1个回答
0
投票

我遇到了同样的问题,我的错误是我忘记在我的 MauiProgram.cs 中包含 .UseBottomSheet() 。除了 DismissAsync 会无限期挂起之外,一切正常。添加此调用后,以编程方式调用 DismissAsync 就开始工作。

© www.soinside.com 2019 - 2024. All rights reserved.