我正在尝试使用枚举到Combobox进行简单的双向绑定,但到目前为止还没有找到任何可用于我的代码的内容。
我的枚举(C#):
public enum CurrenciesEnum { USD, JPY, HKD, EUR, AUD, NZD };
Enum应设置/绑定的属性:
private string _ccy;
public string Ccy
{
get
{
return this._ccy;
}
set
{
if (value != this._ccy)
{
this._ccy= value;
NotifyPropertyChanged("Ccy");
}
}
}
不起作用的Xaml代码:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ObjectDataProvider x:Key="Currencies" MethodName="GetValues" ObjectType="{x:Type System:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="ConfigManager:CurrenciesEnum" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</ResourceDictionary>
</UserControl.Resources>
<ComboBox ItemsSource="{Binding Source={StaticResource Currencies}}" SelectedItem="{Binding Ccy, Mode=TwoWay}"/>
提前感谢您的帮助!
答案 0 :(得分:0)
问题是您将Enum
绑定到string
,由于绑定引擎中的默认ToString
操作,这只会以一种方式工作。
如果您仅使用string
值将ObjectDataProvider
方法名称更改为GetNames
,则会返回Enum
的字符串值,并且会绑定两种方式,其他选项是不绑定到字符串,而是Enum
类型。
<ObjectDataProvider x:Key="Currencies" MethodName="GetNames" ObjectType="{x:Type System:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="ConfigManager:CurrenciesEnum" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
答案 1 :(得分:0)
我将枚举加载到词典
public static Dictionary<T, string> EnumToDictionary<T>()
where T : struct
{
Type enumType = typeof(T);
// Can't use generic type constraints on value types,
// so have to do check like this
if (enumType.BaseType != typeof(Enum))
throw new ArgumentException("T must be of type System.Enum");
Dictionary<T, string> enumDL = new Dictionary<T, string>();
//foreach (byte i in Enum.GetValues(enumType))
//{
// enumDL.Add((T)Enum.ToObject(enumType, i), Enum.GetName(enumType, i));
//}
foreach (T val in Enum.GetValues(enumType))
{
enumDL.Add(val, val.ToString());
}
return enumDL;
}