如何将枚举绑定到Switch控件? Xamarin

时间:2017-08-11 06:47:30

标签: c# xamarin.forms

我的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
}

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