X: Static in UWP XAML
une application sur laquelle je travaille nécessite un ConverterParameter pour être un enum. Pour cela, la façon de le faire serait:
{Binding whatever,
Converter={StaticResource converterName},
ConverterParameter={x:Static namespace:Enum.Value}}
cependant, la plate-forme UWP x: namespace ne semble pas avoir l'extension statique.
Est-ce que quelqu'un sait s'il y a une solution qui ne s'appuie pas sur x:Static pour comparer un enum dans la reliure?
4 réponses
Cela fonctionne pour moi, dans un UWP:
<Button Command="{Binding CheckWeatherCommand}">
<Button.CommandParameter>
<local:WeatherEnum>Cold</local:WeatherEnum>
<Button.CommandParameter>
</Button>
il n'y a pas D'Extension de balisage statique sur UWP (et la plate-forme WinRT aussi).
une des solutions possibles est de créer une classe avec des valeurs enum comme propriétés et de stocker l'instance de cette classe dans la débrouillardise.
Exemple:
public enum Weather
{
Cold,
Hot
}
voici notre classe avec des valeurs enum:
public class WeatherEnumValues
{
public static Weather Cold
{
get
{
return Weather.Cold;
}
}
public static Weather Hot
{
get
{
return Weather.Hot;
}
}
}
Dans votre ResourceDictionary:
<local:WeatherEnumValues x:Key="WeatherEnumValues" />
Et ici:
"{Binding whatever, Converter={StaticResource converterName},
ConverterParameter={Binding Hot, Source={StaticResource WeatherEnumValues}}}" />
Le plus concis que je connaisse...
public enum WeatherEnum
{
Cold,
Hot
}
définir la valeur enum dans XAML:
<local:WeatherEnum x:Key="WeatherEnumValueCold">Cold</local:WeatherEnum>
Et il suffit de l'utiliser:
"{Binding whatever, Converter={StaticResource converterName},
ConverterParameter={StaticResource WeatherEnumValueCold}}"
C'est une réponse en utilisant les ressources et sans Convertisseurs:
View:
<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
.........................
}