WPF의 열거 형 값 컬렉션에 확인란 목록을 바인딩하고 싶습니다. 열거 형은 [Flags]가 아닙니다.WPF 바인딩 열거 형 목록 (또는 이와 유사한) 확인란 목록에
컨텍스트 : 각 항목에 내 enum의 인스턴스가있는 DataGrid를 필터링하기위한 것입니다. List에 바인딩 할 필요는 없지만 고정 된 크기의 컬렉션도 작동합니다.
WPF의 열거 형 값 컬렉션에 확인란 목록을 바인딩하고 싶습니다. 열거 형은 [Flags]가 아닙니다.WPF 바인딩 열거 형 목록 (또는 이와 유사한) 확인란 목록에
컨텍스트 : 각 항목에 내 enum의 인스턴스가있는 DataGrid를 필터링하기위한 것입니다. List에 바인딩 할 필요는 없지만 고정 된 크기의 컬렉션도 작동합니다.
, 당신은 그것은 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
등)이 선언 . 참고 : sys
및 local
네임 스페이스를 먼저 선언해야합니다. 여기서 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();
}
이 것이 적합합니까? 모든 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 속성 Keys
및 Values
를 사용할 수 있습니다.
myListBox.ItemsSource = myEnumDictionary.Keys;
물론 XAML에서 직접 처리 할 수 있습니다. 당신이 당신의 열거의 가능한 모든 값에 바인딩 할 가정
,하지만, 난 여전히 선택된 값을 바인딩하는 방법을 잘 모릅니다. –
@TomasGrosup 수정 내 대답을 참조하십시오 – Dummy01
+1 내 방식이 마음에 들지만 확실히 또한 당신도 좋아합니다! – Dummy01
감사합니다. 목록 상자를 표시하는 데 사용됩니다. 그리고 두 번째 부분 whatabout, 선택한 값을 List 또는 그와 비슷한 것으로 바인딩 하시겠습니까? –
@TomasGrosup 그것을 할 수있는 방법에 대한 나의 마지막 편집을 참조하십시오. – Botz3000