Guia Completo de XAML: Crie Interfaces de Qualidade em .NET
Comandos em C#: Desacoplamento e MVVM para Interfaces
Introduzir comandos no desenvolvimento de interfaces📜 Interfaces: Contratos que Garantem a Ordem no Universo OOP!Descubra como as interfaces em C# funcionam como contratos que garantem implementações flexíveis e robustas, facilitando o design e testes de sistemas. gráficas em C# (seja no WPF ou no MAUI) é uma forma de desacoplar a lógica de negócio dos eventos da interface
📜 Interfaces: Contratos que Garantem a Ordem no Universo OOP!Descubra como as interfaces em C# funcionam como contratos que garantem implementações flexíveis e robustas, facilitando o design e testes de sistemas.. Ao invés de colocar o código diretamente no evento do botão (por exemplo, no code-behind), podemos criar
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. um Command que encapsula a ação em si. Isso traz organização, facilita testes e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. deixa tudo mais limpo.
A seguir, vamos explorar o que são Commands, por que você deve usá-los e como implementá-los na prática para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! desacoplar ações dos botões na sua aplicação desktop ou multiplataforma
🌍 MAUI: Multiplataforma com uma Única Base de Código!Aprenda como criar aplicativos multiplataforma com .NET MAUI. Descubra dicas, exemplos práticos e boas práticas para desenvolver apps nativos usando C#..
Tabela de Conteúdo🔗
- O que são Commands
- Vantagens de Usar Commands
- Criando seu Primeiro Command
- Ligando o Command ao Botão via XAML
🖌️ XAML Básico: Crie Interfaces sem Código C# (Quase)!Descubra como usar XAML para criar interfaces atrativas em aplicações .NET. Aprenda conceitos e dicas práticas para iniciar seu projeto.
- Exemplo Prático
📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!Aprenda a usar Serilog em .NET para registrar logs estruturados, identificar erros e enriquecer informações, transformando seu código num enigma solucionável.: Contador Simples
- Considerações sobre CanExecute
- Conclusão e Boas Práticas
🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados.
- O Problema
🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. dos Eventos Diretos nos Botões
- ICommand: A Interface
📜 Interfaces: Contratos que Garantem a Ordem no Universo OOP!Descubra como as interfaces em C# funcionam como contratos que garantem implementações flexíveis e robustas, facilitando o design e testes de sistemas. que Desacopla Ações
- Implementando RelayCommand: Seu Novo Melhor Amigo
- Passando Parâmetros
🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!Aprenda sobre a técnica de sobrecarga de métodos no C# com exemplos e práticas recomendadas para melhorar a organização e legibilidade do seu código. para Comandos
- Vantagens em Testes e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Manutenção
- Cenários
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Reais: Quando Usar Comandos?
- Desafio Prático: Calculadora com Comandos
O que são Commands🔗
Em aplicações desktop (como WPF) ou multiplataforma🌍 MAUI: Multiplataforma com uma Única Base de Código!Aprenda como criar aplicativos multiplataforma com .NET MAUI. Descubra dicas, exemplos práticos e boas práticas para desenvolver apps nativos usando C#. (como MAUI), um Command é uma forma de centralizar a lógica que será executada quando
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. interagimos com um controle, como um botão. No lugar de tratarmos o evento
Click
, dizemos algo como:
"Este botão invoca o Command X, que sabe o que fazer."
Assim, você não precisa de um handler de evento no code-behind do formulário ou janela. Em projetos🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!Aprenda a otimizar seu perfil LinkedIn com dicas essenciais para devs .NET. Conquiste oportunidades e destaque suas habilidades! que seguem o padrão MVVM
🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto., o Command vive normalmente no ViewModel
🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto., garantindo o desacoplamento entre a interface
📜 Interfaces: Contratos que Garantem a Ordem no Universo OOP!Descubra como as interfaces em C# funcionam como contratos que garantem implementações flexíveis e robustas, facilitando o design e testes de sistemas. e a lógica.
Vantagens de Usar Commands🔗
- Separação de responsabilidades: a tela (View
🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto.) fica limpa e sem lógica de negócio.
- Maior testabilidade: é mais fácil criar
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. testes para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! um Command do que para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! um evento no code-behind.
- Reutilização de código: o mesmo Command pode ser usado em vários lugares.
- Conformidade com MVVM
🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto.: Commands são parte essencial das boas práticas
🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. nesse padrão.
Criando seu Primeiro Command🔗
O ingrediente principal para criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. um Command em C# é a interface
📜 Interfaces: Contratos que Garantem a Ordem no Universo OOP!Descubra como as interfaces em C# funcionam como contratos que garantem implementações flexíveis e robustas, facilitando o design e testes de sistemas.
ICommand
. Ela possui alguns membros que precisamos implementar:
Execute(object parameter)
: o método🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. que é chamado quando o comando é executado.
CanExecute(object parameter)
: o método🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. que indica se o comando pode ser executado no momento.
CanExecuteChanged
: um evento que deve ser disparado quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. algo muda e pode influenciar o valor de
CanExecute
.
Um exemplo simples é criar uma classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara.
RelayCommand
ou DelegateCommand
. Eis um modelo🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto. genérico de
RelayCommand
:
using System;
using System.Windows.Input;
public class RelayCommand : ICommand
{
private readonly Action<object> _execute;
private readonly Func<object, bool> _canExecute;
public event EventHandler CanExecuteChanged;
public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
{
_execute = execute;
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
=> _canExecute == null || _canExecute(parameter);
public void Execute(object parameter)
=> _execute(parameter);
public void RaiseCanExecuteChanged()
=> CanExecuteChanged?.Invoke(this, EventArgs.Empty);
}
Action<object> execute
para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! a ação principal.
Func<object, bool> canExecute
para definir quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. a ação está habilitada ou não (opcional).
Ligando o Command ao Botão via XAML🔗
Depois de ter esse Command pronto, você pode associá-lo a uma propriedade⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção. (por exemplo,
IncrementCommand
) no seu ViewModel🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto.. Então
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades., no seu XAML, você aponta para ele desta forma (no WPF, por exemplo):
<Window x:Class="MinhaApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MinhaApp"
Title="Exemplo Commands" Height="200" Width="400">
<Grid>
<Button Content="Incrementar"
Command="{Binding IncrementCommand}"
Width="100" Height="30"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Grid>
</Window>
No code-behind do Window
ou no seu ViewModel🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto., você define:
public class MainViewModel
{
public ICommand IncrementCommand { get; }
private int _contador;
public int Contador
{
get => _contador;
set
{
_contador = value;
// Chamaria OnPropertyChanged aqui se estiver usando INotifyPropertyChanged
}
}
public MainViewModel()
{
IncrementCommand = new RelayCommand(
execute: (obj) =>
{
Contador++;
},
canExecute: (obj) => true // Pode colocar lógica para habilitar/desabilitar
);
}
}
Exemplo Prático: Contador Simples🔗
Imagine que você queira exibir um contador na tela:
1. A vista (View🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto.) tem um
TextBlock
para exibir o valor🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. do contador e um
Button
para🖌️ XAML Básico: Crie Interfaces sem Código C# (Quase)!Descubra como usar XAML para criar interfaces atrativas em aplicações .NET. Aprenda conceitos e dicas práticas para iniciar seu projeto.
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! incrementá-lo.
2. O ViewModel🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto. possui a propriedade
⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção.
Contador
e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. o Command para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! incrementar.
<StackPanel Margin="20">
<TextBlock Text="{Binding Contador, Mode=OneWay}"
FontSize="24"
HorizontalAlignment="Center"
Margin="0,0,0,10"/>
<Button Content="+1" Command="{Binding IncrementCommand}" Width="50" />
</StackPanel>
E📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. no ViewModel
🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto.:
public class MainViewModel : INotifyPropertyChanged
{
private int _contador;
public int Contador
{
get => _contador;
set
{
_contador = value;
OnPropertyChanged(nameof(Contador));
}
}
public ICommand IncrementCommand { get; }
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
public MainViewModel()
{
IncrementCommand = new RelayCommand(
execute: _ => Contador++,
canExecute: _ => true
);
}
}
Agora, cada clique no botão vai chamar Contador++
, atualizando o valor🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança. exibido no
TextBlock
.
Considerações sobre CanExecute🔗
O CanExecute
é útil para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! habilitar ou desabilitar o botão dinamicamente. Por exemplo, se você quiser que o contador não passe de 10, poderia fazer:
IncrementCommand = new RelayCommand(
execute: _ => Contador++,
canExecute: _ => Contador < 10
);
E sempre que a propriedade⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção.
Contador
muda, você também pode notificar o comando para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! verificar se ainda pode executar:
set
{
_contador = value;
OnPropertyChanged(nameof(Contador));
(IncrementCommand as RelayCommand)?.RaiseCanExecuteChanged();
}
Isso faz com que o botão desabilite automaticamente quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades.
Contador
chegar em 10.
Conclusão e Boas Práticas🔗
- Usar Commands é um passo importante para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! organizar o comportamento de botões
🖌️ XAML Básico: Crie Interfaces sem Código C# (Quase)!Descubra como usar XAML para criar interfaces atrativas em aplicações .NET. Aprenda conceitos e dicas práticas para iniciar seu projeto. e outros controles.
- Sempre que um comando depender de algum estado ou propriedade
⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção., lembre-se de chamar o método que atualiza o CanExecute (
RaiseCanExecuteChanged
) quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. ocorrerem mudanças importantes.
- Se estiver seguindo o padrão MVVM
🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto., fixe atenção na separação clara: View
🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto. exibe dados e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. dispara comandos, ViewModel
🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto. faz a lógica, e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. a Model
🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto. mantém as informações da aplicação.
Trabalhar com Commands dá mais estrutura ao seu código e torna mais simples adicionar📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. novas funcionalidades sem criar uma bagunça de eventos dispersos. É o tipo de prática que certamente vai ajudar você a manter um projeto saudável e facilitar a vida no futuro. Boa programação!
🔗 O Problema dos Eventos Diretos nos Botões🔗
Imaginem este código típico em um botão de login🎲 Desafio: Crie um Sistema de Login com Tratamento de Erros Robusto!Aprenda a criar um sistema de login robusto em C#, com tratamento de erros adequado, validação e segurança para evitar vulnerabilidades.:
// ❌ Acoplamento Perigoso!
private void btnLogin_Click(object sender, RoutedEventArgs e)
{
var usuario = txtUsuario.Text;
var senha = txtSenha.Password;
if (ValidarCredenciais(usuario, senha))
{
// 10 linhas de lógica...
MessageBox.Show("Bem-vindo!");
}
else
{
// Mais código repetido...
}
}
Problemas:
- Lógica misturada com UI 🤯
- Dificuldade para reutilizar em outros botões
🖌️ XAML Básico: Crie Interfaces sem Código C# (Quase)!Descubra como usar XAML para criar interfaces atrativas em aplicações .NET. Aprenda conceitos e dicas práticas para iniciar seu projeto.
- Testes complexos (precisa simular clicks) 🧪
- Código duplicado em múltiplos eventos
⚡ ICommand: A Interface que Desacopla Ações🔗
O padrão Command do WPF/MVVM resolve isso através da interface📜 Interfaces: Contratos que Garantem a Ordem no Universo OOP!Descubra como as interfaces em C# funcionam como contratos que garantem implementações flexíveis e robustas, facilitando o design e testes de sistemas.
ICommand
:
public interface ICommand
{
bool CanExecute(object parameter);
void Execute(object parameter);
event EventHandler CanExecuteChanged;
}
Funcionamento:
1. Botão se liga a um comando via Command="{Binding LoginCommand}"
2. CanExecute
define se o botão está habilitado ✅
3. Execute
contém a lógica real da ação
🛠️ Implementando RelayCommand: Seu Novo Melhor Amigo🔗
Crie uma classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. genérica para simplificar a criação de comandos:
// ✅ Implementação Prática
public class RelayCommand : ICommand
{
private readonly Action<object> _execute;
private readonly Func<object, bool> _canExecute;
public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
{
_execute = execute ?? throw new ArgumentNullException(nameof(execute));
_canExecute = canExecute;
}
public bool CanExecute(object parameter) => _canExecute == null || _canExecute(parameter);
public void Execute(object parameter) => _execute(parameter);
public event EventHandler CanExecuteChanged
{
add => CommandManager.RequerySuggested += value;
remove => CommandManager.RequerySuggested -= value;
}
}
public class LoginViewModel
{
public ICommand LoginCommand { get; }
public LoginViewModel()
{
LoginCommand = new RelayCommand(ExecuteLogin, CanLogin);
}
private void ExecuteLogin(object parameter)
{
// Lógica limpa e testável!
var (usuario, senha) = (parameter as Tuple<string, string>);
// ...
}
private bool CanLogin(object parameter) => !string.IsNullOrEmpty(usuario);
}
🎯 Passando Parâmetros para Comandos🔗
Use o binding para enviar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. dados complexos:
<!-- No XAML -->
<Button Command="{Binding DeleteCommand}"
CommandParameter="{Binding SelectedItem}"
Content="Excluir"/>
// Na ViewModel
DeleteCommand = new RelayCommand(param =>
{
var item = param as MeuItem;
Itens.Remove(item);
}, param => param != null);
🧪 Vantagens em Testes e Manutenção🔗
1. Testabilidade:
[Test]
public void LoginCommand_DeveFalharComUsuarioVazio()
{
var vm = new LoginViewModel();
vm.Usuario = "";
Assert.IsFalse(vm.LoginCommand.CanExecute(null));
}
2. Reuso: Um comando de "Salvar" pode ser usado em menu, botão e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. atalho de teclado
3. Separação de Responsabilidades: UI não sabe da lógica de negócio
🌍 Cenários Reais: Quando Usar Comandos?🔗
1. Ações com Pré-Condições (ex: botão habilitado somente se campos válidos)
2. Operações Demoradas (com cancelamento via CancellationToken
)🎯 CancellationToken: Cancele Operações Demoradas!Descubra como aplicar CancellationToken no C# para abortar operações com eficiência, evitando travas de UI e otimizando o uso de recursos das aplicações.
3. Undo/Redo Systems (padrão Command histórico)
4. Multiplataforma🌍 MAUI: Multiplataforma com uma Única Base de Código!Aprenda como criar aplicativos multiplataforma com .NET MAUI. Descubra dicas, exemplos práticos e boas práticas para desenvolver apps nativos usando C#. (mesma lógica em WPF, MAUI
🌍 MAUI: Multiplataforma com uma Única Base de Código!Aprenda como criar aplicativos multiplataforma com .NET MAUI. Descubra dicas, exemplos práticos e boas práticas para desenvolver apps nativos usando C#. e Blazor)
🧩 Desafio Prático: Calculadora com Comandos🔗
Objetivo: Criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. uma calculadora onde cada operação (+,-,,/) é um comando separado.
Passos:
1. Crie uma classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara.
CalculadoraViewModel
2. Implemente comandos para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! cada operação
3. Use CommandParameter
para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! capturar números
4. Garanta que divisão🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. por zero desabilite o botão ➗
Dica:
public ICommand DividirCommand => new RelayCommand(
param => Resultado = Numero1 / Numero2,
param => Numero2 != 0);
Dica para Managers/QA: Com comandos, fica fácil rastrear qual ação foi disparada através do nome do comando, melhorando a comunicação em testes e especificações.
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- .NET Documentation: learn.microsoft.com/pt-br/dotnet/
- Awesome .NET: github.com/quozd/awesome-dotnet
- C# Language Specification: learn.microsoft.com/pt-br/dotnet/csharp/language-reference/language-specification/
- GitHub: Microsoft/.NET: github.com/dotnet
- Microsoft Learn: C# e .NET: learn.microsoft.com/pt-br/dotnet/csharp/