gpt4 book ai didi

c# - 使用 MVVM 显示枚举 equalivent 字符串值

转载 作者:太空狗 更新时间:2023-10-30 00:42:42 24 4
gpt4 key购买 nike

我的目标是对与我的枚举相等的字符串进行数据绑定(bind)。

    public enum Language
{
Unknown=0,CSharp=1,VB=2,VisualCpp=3,FSharp=4
}

public enum ProjectType
{
Unknown=0,ConsoleApplication=1,ClassLibrary=2
}

这是我的模型:

  class PLanguage
{
public Language EnumLanguage { get; set; }
public string ImagePath { get; set; }
public List<ProjectType> EnumTypes { get; set; }

}

我的 View 模型:

  class PLanguageViewModel : ViewModelBase
{

public PLanguage PLanguage { get; set; }
private ObservableCollection<string> _typeCollection;
public PLanguageViewModel(PLanguage pLanguage)
{
PLanguage = pLanguage;
}
public ObservableCollection<string> TypeCollection
{
get{} //CAST PLanguage.EnumTypes FROM ENUM TO STRING
}
public string ImagePath
{
get { return PLanguage.ImagePath; }
set
{
if (PLanguage.ImagePath != value)
{
PLanguage.ImagePath = value;
RaisePropertyChanged(() => ImagePath);
}
}
}
public static String ConvertToString(Enum eEnum)
{
return Enum.GetName(eEnum.GetType(), eEnum);
}

}

如您所见,我有一个 ProjectType 类型的枚举列表。我想将它们转换为与枚举值相等的可观察字符串集合,以便我可以在我的 View 中轻松地对它们进行数据绑定(bind)。我需要为该集合创建一个依赖属性,我该怎么做?

最佳答案

您可以使用 Enum.GetNames获取所有值和 ObservableCollection constructor overload用于数据绑定(bind)。

public PLanguageViewModel(PLanguage pLanguage)
{
PLanguage = pLanguage;
_typeCollection = new ObservableCollection<string>(Enum.GetNames(typeof(ProjectType)));
...
}

您可以使用 Enum.Parse从可观察集合中检索 ProjectType

EDIT 根据评论使用以下将 String 绑定(bind)到 SelectItem。现在您可以在 View 中对 SelectedItem 使用 DataBinding。您也可以使用 IValueConverter 实现相同的效果

private ProjectType _selectedItem'

public string SelectedItem
{
get
{
return ConvertEnumToString(_selectedItem);
}
set
{
_selectedItem = ConvertStringToEnum(value);
}
}

public static string ConvertEnumToString(Enum eEnum)
{
return Enum.GetName(eEnum.GetType(), eEnum);
}

public static ProjectType ConvertStringToEnum(string value)
{
return (ProjectType)Enum.Parse(typeof(ProjectType), value);
}

关于c# - 使用 MVVM 显示枚举 equalivent 字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14104088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com