私が取り組んでいるアプリは、ConverterParameterが列挙型である必要があります。このための通常の方法は次のとおりです。
{Binding whatever,
Converter={StaticResource converterName},
ConverterParameter={x:Static namespace:Enum.Value}}
ただし、UWPプラットフォームx:名前空間にはStatic拡張機能がないようです。
バインドの列挙型を比較するためにx:Staticに依存しない解決策があるかどうか誰かが知っていますか?
これは私にとってUWPで機能します:
<Button Command="{Binding CheckWeatherCommand}">
<Button.CommandParameter>
<local:WeatherEnum>Cold</local:WeatherEnum>
<Button.CommandParameter>
</Button>
UWP(およびWinRTプラットフォームも)には静的マークアップ拡張機能はありません。
可能な解決策の1つは、列挙値をプロパティとして持つクラスを作成し、このクラスのインスタンスをResourceDictionaryに格納することです。
例:
public enum Weather
{
Cold,
Hot
}
列挙値を持つクラスは次のとおりです。
public class WeatherEnumValues
{
public static Weather Cold
{
get
{
return Weather.Cold;
}
}
public static Weather Hot
{
get
{
return Weather.Hot;
}
}
}
ResourceDictionaryで:
<local:WeatherEnumValues x:Key="WeatherEnumValues" />
そして、私たちはここにいます:
"{Binding whatever, Converter={StaticResource converterName},
ConverterParameter={Binding Hot, Source={StaticResource WeatherEnumValues}}}" />
私が知る最も簡潔な方法...
public enum WeatherEnum
{
Cold,
Hot
}
XAMLで列挙値を定義します。
<local:WeatherEnum x:Key="WeatherEnumValueCold">Cold</local:WeatherEnum>
そして単にそれを使用します:
"{Binding whatever, Converter={StaticResource converterName},
ConverterParameter={StaticResource WeatherEnumValueCold}}"
これは、リソースを利用し、コンバーターなしの回答です。
ビュー:
<Page
.....
xmlns:local="using:EnumNamespace"
.....
>
<Grid>
<Grid.Resources>
<local:EnumType x:Key="EnumNamedConstantKey">EnumNamedConstant</local:SettingsCats>
</Grid.Resources>
<Button Content="DoSomething" Command="{Binding DoSomethingCommand}" CommandParameter="{StaticResource EnumNamedConstantKey}" />
</Grid>
</Page>
ViewModel
public RelayCommand<EnumType> DoSomethingCommand { get; }
public SomeViewModel()
{
DoSomethingCommand = new RelayCommand<EnumType>(DoSomethingCommandAction);
}
private void DoSomethingCommandAction(EnumType _enumNameConstant)
{
// Logic
.........................
}