CommandParameterに列挙体を指定する方法

 プロパティに列挙体を指定する場合、属性構文を使って列挙値を文字列として指定します。たとえば、VisibilityプロパティにVisibility列挙体のVisibleを指定する場合のXAMLは下記のようになります。コードのように列挙体を指定する必要がありません。


XAML

<Button Visibility="Visible"/>


 これはXAMLの場合、プロパティの型に基づいて列挙体が推測されているためです。


XAML 構文の詳細 | Microsoft Docs

列挙体を指定する方法は、コードで使用するような Enumeration.Value という形式ではありません。 Value のみを指定します。Enumeration は、設定するプロパティの型に基づいて推論されます。 属性を Enumeration.Value という形式で指定した場合、正しく解決されません。



 しかしながら、CommandParameterプロパティのようなオブジェクト型のプロパティに列挙体を指定したい場合には、このような推測が行われないため指定することができません。そのような場合、x:Staticのマークアップ拡張機能を使って下記のように指定します。


C#

enum Mode
{
Edit, Add, Remove
}


XAML
<Button CommandParameter="{x:Static local:Mode.Edit}"/>