UserControls: Crie Componentes Reutilizáveis no Desktop
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> executepara
🔄 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> canExecutepara 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/

há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 11 months atrás
há 10 months atrás
há 10 months atrás