我正在使用 MVVM 模式对项目进行少量添加。
该项目有点大,但我将其精简为一个很小的示例项目,以使这里的工作变得更容易。
using CommunityToolkit.Mvvm.ComponentModel;
namespace MauiApp6.ViewModels
{
public partial class BusyViewModel : ObservableObject
{
[ObservableProperty]
private bool isBusy = false;
}
}
using CommunityToolkit.Mvvm.Input;
namespace MauiApp6.ViewModels
{
public partial class CommandViewModel
{
private BusyViewModel busyViewModel;
public CommandViewModel()
{
// Initialize BusyViewModel
busyViewModel = new BusyViewModel();
}
[RelayCommand()]
internal void Click()
{
// Set IsBusy to true
busyViewModel.IsBusy = true;
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:vm="clr-namespace:MauiApp6.ViewModels"
x:Class="MauiApp6.MainPage" >
<StackLayout>
<Button Text="Click Me"
BindingContext="{Binding Source={vm:CommandViewModel}}"
Command="{Binding ClickCommand}"/>
<Label BindingContext="{Binding Source={vm:BusyViewModel}}"
Text="{Binding IsBusy}"/>
<ActivityIndicator BindingContext="{Binding Source={vm:BusyViewModel}}"
IsRunning="{Binding IsBusy}"/>
</StackLayout>
</ContentPage>
你没有正确使用你的
BindingContext
,你需要的是如下
首先,您需要将
BindingContext
分配给您的页面,一旦您将其分配为 DataType,以便它被编译并绑定到您的 XAML,其余的将自行完成
public MainPage()
{
InitializeComponent();
BindingContext= new CommandViewModel();
}
在您的主页 XAML 中
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:vm="clr-namespace:MauiApp6.ViewModels"
x:DataType="vm:CommandViewModel"
x:Class="MauiApp6.MainPage" >
<StackLayout>
<Button Text="Click Me"
Command="{Binding ClickCommand}"/>
<Label Text="{Binding IsBusy}"/>
<ActivityIndicator IsRunning="{Binding IsBusy}"/>
</StackLayout>
</ContentPage>
另外,我不明白
BusyViewModel
的目的是什么。