Think your app feels snappy? Think again. Most developers underestimate the impact of user input responsiveness on user satisfaction. The truth? A laggy button or an ignored tap can drive users away faster than a crash. In .NET MAUI, getting input and event handling right isn’t just good practice—it’s mission-critical. Let’s walk through how to turn clunky UI interactions into smooth, satisfying experiences.
Working with Input Elements
.NET MAUI provides several essential input controls. Here are the most common ones:
- Entry (TextBox equivalent)
- Button
- Switch
- Slider
Let’s see a practical example:
<VerticalStackLayout Padding="30" Spacing="20">
<Entry x:Name="NameEntry" Placeholder="Enter your name"/>
<Button Text="Greet" Clicked="OnGreetClicked"/>
<Switch x:Name="NotificationsSwitch" Toggled="OnSwitchToggled"/>
<Label x:Name="SwitchStatusLabel"/>
<Slider x:Name="VolumeSlider" Minimum="0" Maximum="100" ValueChanged="OnSliderValueChanged"/>
<Label x:Name="VolumeLabel"/>
<Label x:Name="GreetingLabel" FontSize="20"/>
</VerticalStackLayout>
And the C# code-behind:
private void OnGreetClicked(object sender, EventArgs e)
{
var name = NameEntry.Text;
GreetingLabel.Text = $"Hello, {name}!";
}
private void OnSwitchToggled(object sender, ToggledEventArgs e)
{
SwitchStatusLabel.Text = e.Value ? "Notifications On" : "Notifications Off";
}
private void OnSliderValueChanged(object sender, ValueChangedEventArgs e)
{
VolumeLabel.Text = $"Volume: {(int)e.NewValue}%";
}
Explanation:
- The
Entry
collects user input. - The
Button
triggersOnGreetClicked
, updating the greetingLabel
. - The
Switch
toggles between on/off states withOnSwitchToggled
, updating a label to show the status. - The
Slider
lets users select a value (like volume), andOnSliderValueChanged
updates the label accordingly.
Handling Gestures
MAUI allows tapping, swiping, pinching, and more:
<Image Source="dotnet_bot.png">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="OnImageTapped"/>
</Image.GestureRecognizers>
</Image>
private void OnImageTapped(object sender, EventArgs e)
{
Console.WriteLine("Image was tapped!");
}
Gesture recognizers are powerful for UI elements that don’t have traditional input handlers.
Commands and MVVM Event Handling
For maintainable apps, code-behind isn’t ideal. Let’s use the MVVM approach with ICommand
.
Using ICommand
public class MainViewModel
{
public ICommand GreetCommand { get; }
public MainViewModel()
{
GreetCommand = new Command(OnGreet);
}
private void OnGreet()
{
Console.WriteLine("Greeting from MVVM!");
}
}
And in your XAML:
<Button Text="Greet" Command="{Binding GreetCommand}"/>
Using RelayCommand (CommunityToolkit.Mvvm)
If you’re using CommunityToolkit.Mvvm
:
public partial class MainViewModel : ObservableObject
{
[RelayCommand]
private void Greet()
{
Console.WriteLine("RelayCommand greeting!");
}
}
No need to manually create ICommand properties—it’s auto-generated.
Keyboard Handling and Input Validation
Managing Focus and Keyboard
To move focus programmatically:
SecondEntry.Focus();
To dismiss the keyboard:
NameEntry.Unfocus();
Validating Form Inputs
Here’s a simple validation example:
private void OnSubmitClicked(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(NameEntry.Text))
{
DisplayAlert("Validation Error", "Name is required", "OK");
return;
}
// Proceed with submission logic
}
You can also use IDataErrorInfo
or INotifyDataErrorInfo
for MVVM validation in ViewModels.
FAQ: Common Questions About Input and Event Handling
Yes. Use the Completed
event on Entry
or Editor
to trigger logic.
Yes. Create a method that checks all fields and returns a boolean, or use validation frameworks.
Always prefer MVVM with ICommand
for scalability and testability.
Conclusion: Make Your MAUI App Feel Alive
Handling input and events in .NET MAUI isn’t just about functionality; it’s about creating a smooth, intuitive user experience. Whether you go with event handlers or full MVVM with commands, the key is consistency and clarity.
Try upgrading one screen of your app today using these techniques. Let me know how it goes in the comments!
And hey, if this helped clean up your input logic or made your UI pop just a bit more—share it! Got a trick of your own? Drop it below and let’s make the MAUI dev world a little smarter, one interaction at a time.