我的pcl中有切换控件,并且有一个用于控件的枚举。我不知道如何将enum的值绑定到交换机。如果开关关闭,则值为0,如果开启,则值为1.如何将其绑定到枚举?
<StackLayout Orientation="Horizontal" VerticalOptions="Center" HorizontalOptions="Center" Grid.Row="0" Grid.Column="1">
<Label YAlign="Center" Text="M "></Label>
<Switch x:Name="switchM" ></Switch>
</StackLayout>
枚举类
public enum mActive
{
NotToggled = 0,
Toggled = 1
}
答案 0 :(得分:2)
您可以为此编写一个值转换器。 IsToggled
的{{1}}属性只接受Switch
参数,因此您必须将bool
类型转换为Enum
。你的看起来会像以下几样:
bool
然后确保在您正在使用它的页面上,可以通过在顶部添加名称空间声明在XAML中找到它:
public class BoolToMyEnumConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is mActive)
{
return (mActive)value == 0 ? false : true;
}
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is bool)
{
return (bool)value ? mActive.Toggled : mActive.NotToggled;
}
return mActive.NotToggled;
}
}
完成后,您可以将其添加到您网页的资源词典中:
xmlns:local="clr-namespace:MyApp.Converters;assembly=MyApp"
在Switch的绑定中,您可以指定:
<ContentPage.Resources>
<ResourceDictionary>
<local:BoolToMyEnumConverter x:Key="myConv" />
</ResourceDictionary>
</ContentPage.Resources>
其中引用了mActive类型的View模型中的属性。请记住,这是一个如何运作的草稿。我建议您阅读值转换器以帮助您进一步实现此目的。
<Switch IsToggled="{Binding MyEnumInViewModel, Converter={StaticResource myConv}}" />