2011-04-13 75 views
2

我經常需要處理用戶界面中的列表,該列表轉換爲'ViewModel'中的枚舉值。我知道我可以通過ObjectDataProvider直接綁定ListView.ItemSource來提供枚舉項目名稱,但通常這不是最優的,因爲列表項目的視覺表示應該與枚舉項目名稱的不同。ListView和枚舉

另外,來自枚舉的項目有時需要在可視化列表表示中省略。

因此,例如:

enum WhatIWantIsA  { 
     NiceHouse, 
     FastCar, 
     Nothing // omitted in the view 
    } 

應轉化與項目的列表:

A nice house 
    A fast car 

所以我的問題是:你如何處理名單,有條目的預定數量並翻譯爲ViewModel中的枚舉?

+1

這樣的回答可以幫助:http://stackoverflow.com/questions/5350684/adding -enum-to-combobox/5350792#5350792個人我會用我建議的解決方案 - 這將適合視圖模型很好。 – 2011-04-13 07:57:56

+0

對不起,這不是我的意思。我編輯我的問題,使其更清晰 – thumbmunkeys 2011-04-13 08:06:09

+1

實際上我認爲它的重點是,您需要定義項目列表並將它們與枚舉值相關聯。我在那個答案中描述的這個類有一個名字和價值,這個名字是你定義的。或者,使用屬性裝飾枚舉並使用一些通用代碼爲您返回自定義類型。 – 2011-04-13 08:13:03

回答

3

您可以在綁定到枚舉翻譯成可讀的形式使用IValueConverter

public class MyEnumValueConverter : IValueConverter 
{ 
    public object Convert(object value, Type type, ...) 
    { 
     var enumVal = (WhatIWantIsA)value; 
     switch (enumVal) 
     { 
      case "NiceHouse": return "A nice house"; 
      case "FastCar": return "A fast car"; 
      default: return "Unknown Value"; //or throw exception  
     } 
    } 
    public object ConvertBack(object value, Type type, ...) 
    { 
     return value; //probably don't need to implement this 
    } 
} 

使用此對您的綁定:

<Resources> 
    <local:MyEnumValueConverter x:Key="myEnumConverter"/> 
</Resources> 
<ListView ItemsSource="{Binding Converter={StaticResource myEnumConverter}}"/> 

這樣,您的視圖模型可以保持與工作枚舉,用戶看到一個體面的價值。

希望這有助於...

編輯:更新爲使用枚舉的例子中的問題提供了:-)