web-dev-qa-db-fra.com

x: Static in UWP XAML

Une application sur laquelle je travaille nécessite un ConverterParameter pour être une énumération. Pour cela, la manière habituelle 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 existe une solution qui ne repose pas sur x: Static pour comparer une énumération dans une liaison?

20
fonix232

Cela fonctionne pour moi dans un UWP:

<Button Command="{Binding CheckWeatherCommand}">
  <Button.CommandParameter>
     <local:WeatherEnum>Cold</local:WeatherEnum>
  <Button.CommandParameter>
</Button>
35
user5971245

Il n'y a pas d'extension de marquage statique sur UWP (ni sur la plate-forme WinRT).

Une des solutions possibles consiste à créer une classe avec des valeurs enum en tant que propriétés et à stocker une instance de cette classe dans le ResourceDictionary.

Exemple:

public enum Weather
{
    Cold,
    Hot
}

Voici notre classe avec les 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 nous voici:

"{Binding whatever, Converter={StaticResource converterName},
 ConverterParameter={Binding Hot, Source={StaticResource WeatherEnumValues}}}" />
7
RavingDev

La façon la plus concise que je connaisse de ...

public enum WeatherEnum
{
    Cold,
    Hot
}

Définissez la valeur enum en XAML:

<local:WeatherEnum x:Key="WeatherEnumValueCold">Cold</local:WeatherEnum>

Et utilisez-le simplement:

"{Binding whatever, Converter={StaticResource converterName},
 ConverterParameter={StaticResource WeatherEnumValueCold}}"
7
Stefan Ahlm

Ceci est une réponse utilisant des ressources et sans convertisseurs:

Vue :

<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
     .........................
    }
0
usefulBee