binding-enum-command-parameters

WPF Command Parameter Enum Type Binding

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "binding-enum-command-parameters" with this command: npx skills add christian289/dotnet-with-claudecode/christian289-dotnet-with-claudecode-binding-enum-command-parameters

WPF Command Parameter Enum Type Binding

Problem Scenario

When binding enum values to CommandParameter in WPF, passing as string causes type mismatch error.

Error Message

System.ArgumentException: 'Parameter "parameter" (object) cannot be of type System.String, as the command type requires an argument of type MyNamespace.MyEnum.'

Cause

When specifying CommandParameter="Pan" as a string in XAML, WPF passes it as System.String type. However, if the Command expects a specific enum type, automatic type conversion does not occur.

Solution

Use x:Static to Directly Reference Enum Value

<!-- Namespace declaration --> xmlns:viewmodels="clr-namespace:MyApp.ViewModels;assembly=MyApp.ViewModels"

<!-- Wrong method (passed as String) --> <Button Command="{Binding SelectToolCommand}" CommandParameter="Pan" />

<!-- Correct method (passed as Enum type) --> <Button Command="{Binding SelectToolCommand}" CommandParameter="{x:Static viewmodels:ViewerTool.Pan}" />

Complete Example

ViewModel (C#)

public enum ViewerTool { None, Pan, Zoom, WindowLevel }

public partial class ViewerViewModel : ObservableObject { [ObservableProperty] private ViewerTool _currentTool = ViewerTool.Pan;

[RelayCommand]
private void SelectTool(ViewerTool tool)
{
    CurrentTool = tool;
}

}

View (XAML)

<UserControl xmlns:viewmodels="clr-namespace:MyApp.ViewModels;assembly=MyApp.ViewModels">

&#x3C;StackPanel Orientation="Horizontal">
    &#x3C;!-- Select Pan tool -->
    &#x3C;ToggleButton Content="Pan"
                  Command="{Binding SelectToolCommand}"
                  CommandParameter="{x:Static viewmodels:ViewerTool.Pan}"
                  IsChecked="{Binding CurrentTool,
                             Converter={StaticResource EnumToBoolConverter},
                             ConverterParameter={x:Static viewmodels:ViewerTool.Pan}}" />

    &#x3C;!-- Select Zoom tool -->
    &#x3C;ToggleButton Content="Zoom"
                  Command="{Binding SelectToolCommand}"
                  CommandParameter="{x:Static viewmodels:ViewerTool.Zoom}"
                  IsChecked="{Binding CurrentTool,
                             Converter={StaticResource EnumToBoolConverter},
                             ConverterParameter={x:Static viewmodels:ViewerTool.Zoom}}" />

    &#x3C;!-- Select Window/Level tool -->
    &#x3C;ToggleButton Content="W/L"
                  Command="{Binding SelectToolCommand}"
                  CommandParameter="{x:Static viewmodels:ViewerTool.WindowLevel}"
                  IsChecked="{Binding CurrentTool,
                             Converter={StaticResource EnumToBoolConverter},
                             ConverterParameter={x:Static viewmodels:ViewerTool.WindowLevel}}" />
&#x3C;/StackPanel>

</UserControl>

Important Notes

  • Namespace declaration required: Must declare the assembly and namespace where enum is defined in XAML

  • Assembly reference: Specify assembly= when using enum from different project

  • Also applies to Converter: Use x:Static for ConverterParameter as well

Related Pattern

EnumToBoolConverter (for checking selection state)

public class EnumToBoolConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return value?.Equals(parameter) ?? false; }

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
    return (bool)value ? parameter : Binding.DoNothing;
}

}

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

converting-html-css-to-wpf-xaml

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

publishing-wpf-apps

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

managing-styles-resourcedictionary

No summary provided by upstream source.

Repository SourceNeeds Review