如何在 WP 中将枚举绑定到列表选择器?

发布于 2025-01-08 13:21:47 字数 155 浏览 3 评论 0原文

我在 WP 应用程序中使用 so enum:

public enum sex { 人=0, 女士, 其他 。

我如何编写列表选择器项目是性别枚举项目的代码 明确地说,我希望用户从列表选择器中选择性别。请帮忙。

I use so enum in WP application:

public enum gender
{
man = 0,
woman,
other
}

how can i write code that Listpicker items are gender enum items. To tell clear, i want user to select gender from Listpicker. Please, help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

∞觅青森が 2025-01-15 13:21:47

我假设您想绑定到枚举类型的属性,就像这样?

public enum EnumType { Item1, Item2 }
public EnumType Property { get; set; }

我就是这样做的:(

在构造函数中)

theListPicker.ItemsSource = Enum.GetValues(typeof(EnumType));

(XAML)

<phone:PhoneApplicationPage
    ...
    x:Name="_this"/>
    ...
    <phone:PhoneApplicationPage.Resources>
        <local:EnumIntConverter x:Name="enumIntConverter"/>
    </phone:PhoneApplicationPage.Resources>
    ....
    <toolkit:ListPicker ...
        SelectedIndex="{Binding ElementName=_this, Path=Property, Converter={StaticResource enumIntConverter}, Mode=TwoWay}

(在您的命名空间中的某个位置)

public class EnumIntConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return (int)(EnumType)value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return Enum.GetValues(typeof(EnumType)).GetValue((int)value);
    }
}

在我的例子中,我还想使用枚举的描述而不是它们的名称,所以我使用此代码而不是“in构造函数”上面一行:

Array rawValues = Enum.GetValues(typeof(EnumType));
List<string> values = new List<string>();
foreach (EnumType e in rawValues)
    values.Add((typeof(EnumType).GetMember(e.ToString())[0].GetCustomAttributes(typeof(DescriptionAttribute), false)[0] as DescriptionAttribute).Description);
theListPicker.ItemsSource = values;

I assume you want to bind to a property of the enum type, like this?

public enum EnumType { Item1, Item2 }
public EnumType Property { get; set; }

This is how I did it:

(in the constructor)

theListPicker.ItemsSource = Enum.GetValues(typeof(EnumType));

(XAML)

<phone:PhoneApplicationPage
    ...
    x:Name="_this"/>
    ...
    <phone:PhoneApplicationPage.Resources>
        <local:EnumIntConverter x:Name="enumIntConverter"/>
    </phone:PhoneApplicationPage.Resources>
    ....
    <toolkit:ListPicker ...
        SelectedIndex="{Binding ElementName=_this, Path=Property, Converter={StaticResource enumIntConverter}, Mode=TwoWay}

(somewhere in your namespace)

public class EnumIntConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return (int)(EnumType)value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return Enum.GetValues(typeof(EnumType)).GetValue((int)value);
    }
}

In my case, I also wanted to use the enum's Descriptions instead of their names, so I'm using this code instead of the "in the constructor" one-liner above:

Array rawValues = Enum.GetValues(typeof(EnumType));
List<string> values = new List<string>();
foreach (EnumType e in rawValues)
    values.Add((typeof(EnumType).GetMember(e.ToString())[0].GetCustomAttributes(typeof(DescriptionAttribute), false)[0] as DescriptionAttribute).Description);
theListPicker.ItemsSource = values;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文