x:UWP XAML 中的静态

问题描述 投票:0回答:5

我正在开发的应用程序需要 ConverterParameter 为枚举。为此,常规做法是:

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

但是,UWP 平台 x: 命名空间似乎没有 Static 扩展。

有谁知道是否有一个不依赖 x:Static 来比较绑定中的枚举的解决方案?

c# enums windows-10 uwp
5个回答
48
投票

这在 UWP 中对我有用:

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

11
投票

我所知道的最简洁的方法...

public enum WeatherEnum
{
    Cold,
    Hot
}

在 XAML 中定义枚举值:

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

然后简单地使用它:

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

10
投票

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;
        }
    }
}

在您的资源词典中:

<local:WeatherEnumValues x:Key="WeatherEnumValues" />

我们在这里:

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

1
投票

这是一个利用资源且没有转换器的答案:

查看

<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>

视图模型

    public RelayCommand<EnumType> DoSomethingCommand { get; }

    public SomeViewModel()
    {
        DoSomethingCommand = new RelayCommand<EnumType>(DoSomethingCommandAction);
    }

    private void DoSomethingCommandAction(EnumType _enumNameConstant)
    {
     // Logic
     .........................
    }

0
投票

在大多数情况下,

x:Bind
可以直接替代
x:Static
,因此您可以执行以下操作:

ConverterParameter="{x:Bind namespace:Enum.Value}}"

如果您在资源字典中需要

x:Bind
,则需要为其提供一个代码隐藏文件:https://learn.microsoft.com/en-us/windows/uwp/data-binding/data-binding -深入#resource-dictionaries-with-xbind

© www.soinside.com 2019 - 2024. All rights reserved.