您好我遇到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中选择元素,并且应该将字符串的值更新为该枚举类型的名称。
感谢您的任何建议,并对我丑陋的英语表示抱歉。
答案 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; }
}