Architecture \ Using a Handler for Cleaner Code - lundeen-bryan/EZLogger_SLN GitHub Wiki
WPF: Connecting Buttons to Handler Classes for Cleaner Code
This guide explains how to connect button controls in a WPF form to a separate handler class instead of writing all your logic directly in the form's code-behind file. This improves code organization and makes your project easier to maintain.
Why Use a Handler Class?
- Separates user interface code from business logic
- Makes code easier to test and reuse
- Keeps your XAML code-behind file small and focused
Step-by-Step Example
1. Define the Button in XAML
In your WPF user control or window, define a button and connect its Click
event:
<Button x:Name="ActionButton" Content="Run Action" Click="ActionButton_Click" />
2. Create the Handler Class
Create a new class in a separate folder (e.g., Handlers
) that contains the logic for the action:
Public Class ActionHandler
Public Sub Run()
MessageBox.Show("Action has been executed.")
End Sub
End Class
3. Call the Handler from Code-Behind
In the code-behind file for the WPF form, create an instance of the handler and call its method when the button is clicked:
Partial Public Class SomePanel
Inherits UserControl
Private handler As New ActionHandler()
Private Sub ActionButton_Click(sender As Object, e As RoutedEventArgs)
handler.Run()
End Sub
End Class
Benefits of This Pattern
- You can reuse
ActionHandler
in other views or services - You can test
ActionHandler
without needing the UI - Your XAML stays focused only on layout and interaction
Caveats and Common Pitfalls
- Missing Imports: Be sure to add
Imports System.Windows
in both your code-behind and handler class if you use classes likeMessageBox
. - Namespace Mismatch: Ensure your
x:Class
in XAML matches the actual namespace and class name in the code-behind file. - Event Not Triggering: If your button's
Click
event isn't firing, double-check that the name in XAML exactly matches the method name in code-behind. - Incorrect Object References: If you're using controls in the handler, be careful with scope—handlers should operate on data, not directly manipulate UI unless passed in intentionally.
Conclusion
Using handler classes in your WPF application is a great step toward cleaner, more maintainable code. It helps bridge the gap between simple code-behind logic and full MVVM architecture, giving you flexibility as you grow your project.