2012-04-25 2 views

답변

3

, 당신은 그것은 ObjectDataProvider로 할 수 있습니다. 이것은 기본적으로 Enum.GetValues(typeof(TestEnum))에 전화를 나타내며 데이터 소스로 노출

<ObjectDataProvider x:Key="enumValues" MethodName="GetValues" ObjectType="{x:Type sys:Enum}"> 
     <ObjectDataProvider.MethodParameters> 
      <x:Type TypeName="local:TestEnum"/> 
     </ObjectDataProvider.MethodParameters> 
    </ObjectDataProvider> 

: 자원 (Window.Resources 또는 App.Resources 등)이 선언 . 참고 : syslocal 네임 스페이스를 먼저 선언해야합니다. 여기서 sys은 mscorlib에서 시스템이고 local은 열거 형의 네임 스페이스입니다.

당신이 그것을 가졌을 때 당신은 ObjectDataProvider 예를 들어 단지 다른 것 같은 바인딩 소스로 것을 사용할 수 있습니다

<ListBox ItemsSource="{Binding Source={StaticResource enumValues}}"/> 

이 일을 비 선언적 방법은 단지 코드의 것을 할당된다

선택한 항목을 바인딩에 대한
someListBox.ItemsSource = Enum.GetValues(typeof(TestEnum)); 

, 불행히도 selectedItems를 속성은 XAML에서 설정할 수 없습니다, 그러나 당신은 인 selectionchanged 이벤트 사용할 수 있습니다

을 10

한 다음 경우에 (당신이 사용하는 어떤 또는) 당신의 ViewModel의 속성을 설정합니다 : 그것은 부분적으로 맞는

private void lb_SelectionChanged(object sender, SelectionChangedEventArgs e) { 
    viewModel.SelectedValues = lb.SelectedItems.OfType<TestEnum>().ToList(); 
} 
+0

+1 내 방식이 마음에 들지만 확실히 또한 당신도 좋아합니다! – Dummy01

+0

감사합니다. 목록 상자를 표시하는 데 사용됩니다. 그리고 두 번째 부분 whatabout, 선택한 값을 List 또는 그와 비슷한 것으로 바인딩 하시겠습니까? –

+0

@TomasGrosup 그것을 할 수있는 방법에 대한 나의 마지막 편집을 참조하십시오. – Botz3000

2

이 것이 적합합니까? 모든 Enum을 Dictionary로 변환하여 Enum의 내부 int 및 해당 이름에 액세스 할 수 있습니다 (표시 용).

using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace Sample 
{ 
    class Sample 
    { 
     public static IDictionary<String, Int32> ConvertEnumToDictionary<K>() 
     { 
      if (typeof(K).BaseType != typeof(Enum)) 
      { 
       throw new InvalidCastException(); 
      } 
      return Enum.GetValues(typeof(K)).Cast<Int32>().ToDictionary(currentItem => Enum.GetName(typeof(K), currentItem)); 
     } 
    } 
} 

편집 :

당신은 당신이 원하는 바인딩을 수행하는 타입은 ICollection의있는 IDictionary 속성 KeysValues를 사용할 수 있습니다.

myListBox.ItemsSource = myEnumDictionary.Keys; 

물론 XAML에서 직접 처리 할 수 ​​있습니다. 당신이 당신의 열거의 가능한 모든 값에 바인딩 할 가정

+0

,하지만, 난 여전히 선택된 값을 바인딩하는 방법을 잘 모릅니다. –

+0

@TomasGrosup 수정 내 대답을 참조하십시오 – Dummy01

관련 문제