Claude-skill-registry binding-enum-command-parameters
Binds enum values to WPF CommandParameter using x:Static markup extension. Use when passing enum types to commands or avoiding string-based command parameter errors.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/binding-enum-command-parameters" ~/.claude/skills/majiayu000-claude-skill-registry-binding-enum-command-parameters && rm -rf "$T"
manifest:
skills/data/binding-enum-command-parameters/SKILL.mdsource content
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
x:Static<!-- 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"> <StackPanel Orientation="Horizontal"> <!-- Select Pan tool --> <ToggleButton Content="Pan" Command="{Binding SelectToolCommand}" CommandParameter="{x:Static viewmodels:ViewerTool.Pan}" IsChecked="{Binding CurrentTool, Converter={StaticResource EnumToBoolConverter}, ConverterParameter={x:Static viewmodels:ViewerTool.Pan}}" /> <!-- Select Zoom tool --> <ToggleButton Content="Zoom" Command="{Binding SelectToolCommand}" CommandParameter="{x:Static viewmodels:ViewerTool.Zoom}" IsChecked="{Binding CurrentTool, Converter={StaticResource EnumToBoolConverter}, ConverterParameter={x:Static viewmodels:ViewerTool.Zoom}}" /> <!-- Select Window/Level tool --> <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}}" /> </StackPanel> </UserControl>
Important Notes
- Namespace declaration required: Must declare the assembly and namespace where enum is defined in XAML
- Assembly reference: Specify
when using enum from different projectassembly= - Also applies to Converter: Use
forx:Static
as wellConverterParameter
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; } }