Estou com problemas no Command. Quando abro o aplicativo, o botão não desabilita quando os campos estão sem preenchimento e também não valida quando os dados corretos são inseridos.Resultado: o app nunca sai da tela de login. Já tentei de tudo: usar o OnPropertyChanged() e fazer o LoginViewModel herdar de BaseViewModel.Já recriei o LoginViewModel.cs, já recriei a classe LoginView.xaml e não funcionou.Lembrando que não uso o Emulador Android_Accelerated_86_Oreo e nenhum outro Emulador do Visual Studio porque nenhum deles roda. Inclusive testei em máquinas melhores que a minha, e mesmo assim as aplicações não abrem.Por isso eu uso o meu celular Moto One com Android 9.O meu Visual Studio é o 2017 versão 15.9.10.Aqui abaixo estão os códigos do LoginView.xaml e do LoginViewModel :
LoginView.xaml:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:vm="clr-namespace:TestDrive.View_Models"
x:Class="TestDrive.Views.LoginView">
Continuação do LoginView.xaml:
<ContentPage.BindingContext>
<vm:LoginViewModel></vm:LoginViewModel>
</ContentPage.BindingContext>
<StackLayout VerticalOptions="Center" Margin="64">
<Image Source="aluracar.png"></Image>
<Entry Placeholder="Usuário" Text="{Binding Usuario}"></Entry>
<Entry Placeholder="Senha" IsPassword="True" Text="{Binding Senha}"></Entry>
<Button Text="Entrar" Command="Binding EntrarCommand"></Button>
</StackLayout>
LoginViewModel.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using TestDrive.Models;
using Xamarin.Forms;
namespace TestDrive.View_Models
{
public class LoginViewModel : BaseViewModel
{
private string usuario;
public string Usuario
{
get { return usuario; }
set {
usuario = value;
OnPropertyChanged();
((Command)EntrarCommand).ChangeCanExecute();
}
}
private string senha;
public string Senha
{
get { return senha; }
set {
senha = value;
OnPropertyChanged();
((Command)EntrarCommand).ChangeCanExecute();
}
}
public ICommand EntrarCommand { get; private set; }
public LoginViewModel()
{
EntrarCommand = new Command(async () =>
{
var loginService = new LoginService();
await loginService.FazerLogin(new Login(usuario, senha));
}, () =>
{
return string.IsNullOrEmpty(usuario)
&& !string.IsNullOrEmpty(senha);
});
}
}
}