Tod*_*d T 9 xaml xamarin.forms maui
我是 .Net Maui 的新手,但已完成 James Montemagno 的 4 小时研讨会。研讨会包括:
单击该按钮即可工作并填充 CollectionView。当页面打开时,我将如何删除按钮并执行此操作?注意我尝试通过删除“[ICommand]”来修改该方法,但这不起作用。另外,这个操作应该在代码隐藏中还是在 ViewModel 中完成?
预先感谢您的帮助!
(模型视图)
public partial class FieldAssignedWbsViewModel : BaseViewModel
{
FieldAssignedWbsService fieldAssignedWbsService;
public ObservableCollection<FieldAssignedWbs> WbsList { get; set; } = new();
public FieldAssignedWbsViewModel(FieldAssignedWbsService fieldAssignedWbsService)
{
Title = "Wbs Assigned";
this.fieldAssignedWbsService = fieldAssignedWbsService;
}
[ICommand]
async Task GetFieldAssignedWbsListAsync()
{
if (IsBusy)
return;
try
{
IsBusy = true;
var wbsList = await fieldAssignedWbsService.GetFieldAssignedWbsList();
if (WbsList.Count != 0)
WbsList.Clear();
foreach (var wbs in wbsList)
WbsList.Add(wbs);
}
catch (Exception ex)
{
Debug.WriteLine(ex);
await Shell.Current.DisplayAlert("Error!",
$"Undable to get monkeys: {ex.Message}", "OK");
}
finally
{
IsBusy = false;
}
}
Run Code Online (Sandbox Code Playgroud)
}
(集合视图绑定)
<CollectionView BackgroundColor="Transparent"
ItemsSource="{Binding WbsList}"
SelectionMode="None">
Run Code Online (Sandbox Code Playgroud)
(代码隐藏页,错误调用命令方法)
public partial class FieldAssignedWbsPage : ContentPage
{
public FieldAssignedWbsPage(FieldAssignedWbsViewModel viewModel)
{
InitializeComponent();
BindingContext = viewModel;
//The following call does not work
//Hover message: Non-invocable member... cannot be called like a method
await viewModel.GetFieldAssignedWbsListCommand();
}
}
Run Code Online (Sandbox Code Playgroud)
Jay*_*kar 15
尽管最初的答案非常有效,但我建议安装 Microsoft 的.NET MAUI Community Toolkit,然后使用其EventToCommand功能。
安装后,builder.UseMauiCommunityToolkit()添加CreateMauiApp()到MauiProgram.cs.
然后,在相关的 XAML 页面中,添加此命名空间xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit",然后您应该能够使用此代码块来执行您想要的操作:
<ContentPage.Behaviors>
<toolkit:EventToCommandBehavior
EventName="Appearing"
Command="{Binding GetFieldAssignedWbsListCommand}" />
</ContentPage.Behaviors>
Run Code Online (Sandbox Code Playgroud)
我相信这是一个稍微干净一点的解决方案,因为它避免了用任何代码填充代码隐藏,并使 UI 处理纯粹在ViewModel和 之间View。
使用OnAppearing。您可能还需要GetFieldAssignedWbsList 公开
protected override async void OnAppearing()
{
await viewModel.GetFieldAssignedWbsListCommand.Execute(null);
}
Run Code Online (Sandbox Code Playgroud)