0

我正在尝试使用枚举对组合框进行简单的 2 向绑定,但到目前为止还没有找到任何适用于我的代码的东西。

我的枚举(C#):

public enum CurrenciesEnum { USD, JPY, HKD, EUR, AUD, NZD };

枚举应设置的属性 / 绑定到:

    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}"/>

预先感谢您的帮助!

4

2 回答 2

0

那么问题是您将 a 绑定Enum到 a ,由于绑定引擎中string的默认操作,这只会以一种方式工作。ToString

如果您只使用string值将您的ObjectDataProvider方法名称更改为GetNamesthis 将为您返回字符串值Enum并将双向绑定,另一个选项是不绑定到字符串而是绑定Enum类型。

    <ObjectDataProvider x:Key="Currencies" MethodName="GetNames" ObjectType="{x:Type System:Enum}">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="ConfigManager:CurrenciesEnum" />
            </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>
于 2013-03-28T10:30:44.110 回答
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;
}
于 2013-03-28T13:26:45.147 回答