WPF - ComboBox的复杂绑定

时间:2017-02-15 11:37:07

标签: c# wpf combobox enums

您好我遇到WPF绑定问题,并想知道我想要实现的是否真的可行。

我有一个ComboBox,其ItemsSource使用控件中的ObjectDataProvider绑定到X509FindType Enum,如下所示。

<ObjectDataProvider x:Key="x509FindTypes" MethodName="GetValues" ObjectType="{x:Type System:Enum}">
   <ObjectDataProvider.MethodParameters>
        <x:Type TypeName="cryptography:X509FindType" />
   </ObjectDataProvider.MethodParameters>
</ObjectDataProvider>

问题是我需要在我的模型中的SelectedItem和属性之间进行双向绑定,这是字符串的类型(我无法将其更改为特定的枚举类型)。

目标似乎很简单 - 每当我在Model中设置一个字符串时,ComboBox都应该显示这个值。另一方面,用户也可以从ComboBox中选择元素,并且应该将字符串的值更新为该枚举类型的名称。

感谢您的任何建议,并对我丑陋的英语表示抱歉。

1 个答案:

答案 0 :(得分:2)

您应该使用转换器在enum值和string之间进行转换。

请参阅以下示例代码。

<强>转换器:

public class EnumToStringConv : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null)
            return value;

        return (X509FindType)Enum.Parse(typeof(X509FindType), value.ToString(), true);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return ((X509FindType)value).ToString();
    }
}

查看:

<ObjectDataProvider x:Key="x509FindTypes" MethodName="GetValues" ObjectType="{x:Type System:Enum}">
    <ObjectDataProvider.MethodParameters>
        <x:Type TypeName="cryptography:X509FindType" />
    </ObjectDataProvider.MethodParameters>
</ObjectDataProvider>

<local:EnumToStringConv x:Key="EnumToStringConv" />
...

<ComboBox SelectedItem="{Binding YourStringProperty, Converter={StaticResource EnumToStringConv}}"
          ItemsSource="{Binding Source={StaticResource x509FindTypes}}" />

查看型号:

private string _s = "FindByTimeExpired";
public string YourStringProperty
{
    get { return _s; }
    set { _s = value; }
}