web-dev-qa-db-ja.com

x:UWP XAMLの静的

私が取り組んでいるアプリは、ConverterParameterが列挙型である必要があります。このための通常の方法は次のとおりです。

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

ただし、UWPプラットフォームx:名前空間にはStatic拡張機能がないようです。

バインドの列挙型を比較す​​るためにx:Staticに依存しない解決策があるかどうか誰かが知っていますか?

24
fonix232

これは私にとってUWPで機能します:

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

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}}}" />
8
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