如何在WP中将枚举绑定到listpicker?

时间:2012-02-23 10:56:40

标签: windows-phone-7

我在WP应用程序中使用了这样的枚举:

公共枚举性别  {         男人= 0,         女人,         其他  }

我如何编写Listpicker项目是性别枚举项目的代码。要说清楚,我希望用户从Listpicker中选择性别。请帮忙。

1 个答案:

答案 0 :(得分:0)

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

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);
    }
}

在我的情况下,我也想使用枚举的描述而不是他们的名字,所以我使用这个代码而不是上面的“在构造函数中”:

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;