首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将枚举绑定到开关控制?扎马林

如何将枚举绑定到开关控制?扎马林
EN

Stack Overflow用户
提问于 2017-08-11 06:47:30
回答 1查看 779关注 0票数 1

我在我的pcl中有开关控制,并对控制有一个枚举。我不知道如何将枚举的值绑定到开关上。如果开关关闭,则值为0,如果开关打开,则值为1。如何将其绑定到枚举?

代码语言:javascript
复制
<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>

Enum类

代码语言:javascript
复制
public enum mActive
{
    NotToggled = 0,
    Toggled = 1
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-11 07:00:23

您可以为此编写一个值转换器。IsToggled属性的Switch只接受bool参数,因此必须将Enum类型转换为bool。你的看起来就像:

代码语言:javascript
复制
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;
    }
}

然后,通过在顶部添加一个名称空间声明,确保在使用此方法的页面上可以在XAML中找到它:

代码语言:javascript
复制
xmlns:local="clr-namespace:MyApp.Converters;assembly=MyApp"

完成后,您可以将其添加到Page的资源字典中:

代码语言:javascript
复制
 <ContentPage.Resources>
    <ResourceDictionary>
        <local:BoolToMyEnumConverter x:Key="myConv" />
    </ResourceDictionary>
 </ContentPage.Resources>

然后,在开关的绑定中,可以指定:

代码语言:javascript
复制
<Switch IsToggled="{Binding MyEnumInViewModel, Converter={StaticResource myConv}}" />

它引用mActive类型的视图模型中的属性。请记住,这是一个关于它应该如何工作的粗略草案。我建议您阅读价值转换器,以帮助您进一步实现这一点。

代码语言:javascript
复制
public mActive MyEnumInViewModel {get;set;}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45628683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档