2012-12-31 62 views
3

我的目標是數據綁定與我的枚舉相等的字符串。使用MVVM顯示枚舉均衡字符串值

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; } 

    } 

MyViewModel:

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); 
    } 

    } 

正如你所看到的,我有一個類型項目類型的枚舉的列表。我想將它們轉換爲與枚舉值相等的可觀察的字符串集合,因此我可以在我的View中輕鬆地將它們綁定到數據綁定中。 我需要創建該集合的依賴屬性,我該怎麼做?

回答

6

您可以使用Enum.GetNames獲取所有值,並使用ObservableCollection constructor overload進行數據綁定。

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

您可以使用Enum.Parse從觀察的集合檢索ProjectType

編輯按照評論 使用以下爲String綁定到SelectItem。現在,您可以在視圖中使用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); 
} 
+0

我看,謝謝你,我的ObservableCollection的依賴屬性將如何看起來像? – idish

+0

@idish,更新了答案。 – Tilak

+0

非常感謝! – idish