所以我做了一些搜索,尝试询问 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 并尝试自行关闭,但这也不起作用。
预先感谢您对此的任何建议!
我遇到了同样的问题,我的错误是我忘记在我的 MauiProgram.cs 中包含 .UseBottomSheet() 。除了 DismissAsync 会无限期挂起之外,一切正常。添加此调用后,以编程方式调用 DismissAsync 就开始工作。