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?

19
demandé sur fonix232 2015-08-12 14:28:50

4 réponses

Cela fonctionne pour moi, dans un UWP:

<Button Command="{Binding CheckWeatherCommand}">
  <Button.CommandParameter>
     <local:WeatherEnum>Cold</local:WeatherEnum>
  <Button.CommandParameter>
</Button>
33
répondu user5971245 2016-02-23 22:16:47

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}}}" />
7
répondu RavingDev 2015-09-13 20:02:22

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}}"
5
répondu Stefan Ahlm 2015-12-08 12:51:55

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
     .........................
    }
0
répondu usefulBee 2017-06-16 20:47:09