我是新使用.NET MAUI的,我的问题非常简单,但我找不到解决这个问题的方法,我试图使用Mvvm模式通过其x:名称获得任何组件。
这是可能的,通过视图模型?例如,我有一个登录页面后,单击按钮,我希望这个按钮得到阻止,以防止双击。
登录名.xaml
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Ventas_Citel.Views.Login.Login"
xmlns:viewmodel="clr-namespace:Sales.ViewModels.Login"
Title="">
<VerticalStackLayout
//... login page xaml form ...
<Button Text="Log In" WidthRequest="200" CornerRadius="5" HorizontalOptions="Center" Command="{Binding LoginCommand}" x:Name="loginButton"/>
//... login page xaml form ...
</VerticalStackLayout>
登录名.xaml.cs
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Maui.Alerts;
public partial class Login : ContentPage
{
public Login(LoginViewModel viewModel)
{
InitializeComponent();
BindingContext = viewModel;
}
}
登录视图模型
public partial class LoginViewModel : ObservableObject
{
[RelayCommand]
async void Login()
{
if (!string.IsNullOrWhiteSpace(Email) && !string.IsNullOrWhiteSpace(Password))
{
// is there a way to call loginButton component?????
// i need to disable it with loginButton.IsEnable = false;
loginButton.IsEnable = false // doesnt work loginButton doesnt exist
// if there is any error i need to enable it again so the user can re enter
// his/her credentials if it fails
loginButton.IsEnable = true;
}
}
}
我该怎么解决这个问题?
2条答案
按热度按时间pxy2qtax1#
要以正确的MVVM方式解决这个问题,必须向视图模型添加一个附加属性(例如
IsLoginButtonEnabled
),并将按钮的IsEnabled
属性绑定到该属性视图模型
查看
disho6za2#
我想谈谈你的代码:
1.不要尝试访问ViewModel中的View元素。请改用绑定。
1.如果你想绑定使能,不要为特定的按钮命名属性。你不想为每个VisualElement单独处理它。(查看值转换器以获得反转布尔值)
1.这个“isNullOrEmpty”可以很容易地被TextValidationBehavior替换。并且将所有这些绑定到一个bool。所以你不必链接太多的AND检查。