x:Static 在 UWP XAML
x:Static in UWP XAML
我正在开发的一个应用程序要求 ConverterParameter 是一个枚举。为此,常规的做法是:
{Binding whatever,
Converter={StaticResource converterName},
ConverterParameter={x:Static namespace:Enum.Value}}
但是,UWP 平台 x: 命名空间似乎没有静态扩展。
有谁知道是否有不依赖 x:Static 比较绑定枚举的解决方案?
UWP(以及 WinRT 平台)上没有静态标记扩展。
一种可能的解决方案是创建 class 并将枚举值作为属性并将此 class 的实例存储在 ResourceDictionary 中。
示例:
public enum Weather
{
Cold,
Hot
}
这是我们的 class 枚举值:
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}}}" />
我所知道的最简洁的方法...
public enum WeatherEnum
{
Cold,
Hot
}
在XAML中定义枚举值:
<local:WeatherEnum x:Key="WeatherEnumValueCold">Cold</local:WeatherEnum>
并简单地使用它:
"{Binding whatever, Converter={StaticResource converterName},
ConverterParameter={StaticResource WeatherEnumValueCold}}"
这在 UWP 中对我有用:
<Button Command="{Binding CheckWeatherCommand}">
<Button.CommandParameter>
<local:WeatherEnum>Cold</local:WeatherEnum>
<Button.CommandParameter>
</Button>
这是一个利用资源且没有转换器的答案:
查看:
<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
.........................
}
我正在开发的一个应用程序要求 ConverterParameter 是一个枚举。为此,常规的做法是:
{Binding whatever,
Converter={StaticResource converterName},
ConverterParameter={x:Static namespace:Enum.Value}}
但是,UWP 平台 x: 命名空间似乎没有静态扩展。
有谁知道是否有不依赖 x:Static 比较绑定枚举的解决方案?
UWP(以及 WinRT 平台)上没有静态标记扩展。
一种可能的解决方案是创建 class 并将枚举值作为属性并将此 class 的实例存储在 ResourceDictionary 中。
示例:
public enum Weather
{
Cold,
Hot
}
这是我们的 class 枚举值:
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}}}" />
我所知道的最简洁的方法...
public enum WeatherEnum
{
Cold,
Hot
}
在XAML中定义枚举值:
<local:WeatherEnum x:Key="WeatherEnumValueCold">Cold</local:WeatherEnum>
并简单地使用它:
"{Binding whatever, Converter={StaticResource converterName},
ConverterParameter={StaticResource WeatherEnumValueCold}}"
这在 UWP 中对我有用:
<Button Command="{Binding CheckWeatherCommand}">
<Button.CommandParameter>
<local:WeatherEnum>Cold</local:WeatherEnum>
<Button.CommandParameter>
</Button>
这是一个利用资源且没有转换器的答案:
查看:
<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
.........................
}