it-swarm.com.ru

x: статический в UWP XAML

Приложение, над которым я работаю, требует, чтобы ConverterParameter был перечислением. Для этого обычным способом было бы:

{Binding whatever, 
    Converter={StaticResource converterName}, 
    ConverterParameter={x:Static namespace:Enum.Value}}

Однако пространство имен x: платформы UWP, похоже, не имеет статического расширения.

Кто-нибудь знает, есть ли решение, которое не использует x: Static для сравнения перечисления в связывании?

20
fonix232

Это работает для меня в UWP:

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

На UWP нет статического расширения разметки (и платформы WinRT тоже).

Одним из возможных решений является создание класса со значениями перечисления в качестве свойств и сохранение экземпляра этого класса в 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}}}" />
7
RavingDev

Самый краткий способ, которым я знаю ...

public enum WeatherEnum
{
    Cold,
    Hot
}

Определите значение перечисления в XAML:

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

И просто используйте это:

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

Это ответ с использованием ресурсов и без конвертеров:

Посмотреть :

<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