2011-04-13 3 views
2

나는 종종 'ViewModel'의 enum 값으로 변환되는 사용자 인터페이스의 목록을 처리해야합니다. 열거 형 항목 이름을 제공하는 ObjectDataProvider을 통해 ListView.ItemSource을 직접 바인딩 할 수 있지만 목록 항목의 시각적 표현은 이 열거 형 항목 이름과이되어야하므로 종종 적합하지 않습니다.ListView and enums

또한 열거 형의 항목을 시각적 목록 표현으로 생략해야 할 수도 있습니다.

그래서 예를 들면 :

A nice house 
    A fast car 

그래서 제 질문은 다음과 같습니다 : 당신이 항목의 미리 정의 된 번호를 가지고 그, 목록을 처리하려면 어떻게

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

는 항목 목록으로 번역해야 ViewModel의 열거 형으로 변환 하시겠습니까?

+1

:-) 질문에 제공 열거를 사용하는 예를 갱신이 답변이 도움이 될 수 http://stackoverflow.com/questions/5350684/adding -enum-to-combobox/5350792 # 5350792 개인적으로 제가 제안한 해결책과 함께 갈 것입니다 - 이것은보기 모델과 아주 잘 맞을 것입니다. –

+0

미안하지만 그건 내가 의미하는 것이 아닙니다. 나는 명확하게하기 위해 나의 질문을 편집했다. – thumbmunkeys

+1

실제로 내가 생각하는 것은 항목의 목록을 정의하고 enum 값과 연관시켜야한다는 것이다. 그 대답에서 기술 한 클래스는'Name'과'Value'를 가지고 있습니다. 이름은 당신이 정의한 것입니다. 또는 속성을 사용하여 열거 형을 꾸미고 사용자 정의 유형을 반환하는 일] 코드가 있어야합니다. –

답변

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

이 방법은 당신의 뷰 모델은 작업을 유지할 수 있습니다 enum, 그리고 사용자는 알맞은 값을 본다. 이 도움이

희망 ...

편집 :