2013-02-20 2 views
0

콤보 상자의 허용 값 목록에 열거 형 System.IO.Ports.Parity의 허용 가능한 값을 채워야합니다 (C#).열거 형의 ComboBox WPF의 System.IO.Ports.Parity

public class theParitySource : ObservableCollection<Parity> 
{ 
    public theParitySource() 
    {    
     Array parities = System.Enum.GetValues(typeof(Parity)); 
     foreach (Parity p in parities) this.Add(p);    
    } 
} 

(BTW : :이 초기화가 oneliner입니다)이를 위해 내가 컬렉션을 만들고이에게 콤보 상자의 데이터 컨텍스트 만든 :

... 
    xmlns:local="clr-namespace:myNamespace" 
    ... 

    <ComboBox ...> 
     <ComboBox.DataContext> 
      <local:theParitySource /> 
     </ComboBox.DataContext> 
    </ComboBox> 

콤보 상자는, 그러나, 비어을 (비록 디버거에서 theParitySource이 채워지는 것을 볼 수는 있지만 비어있는 것으로 표시되지만 정확한 길이를 가진 것처럼 보입니다. 이 접근법은 다른 보봇 (combo)에서도 작동합니다 (같은 클래스에서도). 정수 값으로 초기화한다는 것은 여기에 열거 형을 사용한다는 사실과 어떻게 든 관련이 있다고 생각합니다. 그러나 나는 이유가 무엇인지 알기 쉽습니다. 어떤 포인터? 변환기를 작성해야합니까? 실제로 나는이 모든 걸 선호하는 것 :

편집 (물론 ... 내가 열거에서 문자열 목록을 작성하여이 문제를 해결할 수 있지만,이 종류의 불쾌한 것) XAML. 그렇게 할 수있는 간단한 방법이 있습니까?

답변

2

당신은 당신의 Window.Resources (또는 어떤 리소스를 사용하는)를 셋업 ObjectDataProvider에서 ObjectDataProvider

를 사용하여 모든 Xaml에서이 작업을 수행 할 수 있습니다.

는 설정하려면 Enums에 대한 ObjectDataProvider 당신은 {x:Type sys:Enum}ObjectTypeGetValuesMethodName 실제 EnumsComboBox을 채우기 위해 설정하거나 Enum

xmlns:sys="clr-namespace:System;assembly=mscorlib" 
    xmlns:io="clr-namespace:System.IO.Ports;assembly=System" 

    <Window.Resources> 

     <ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}" x:Key="ParityValues"> 
      <ObjectDataProvider.MethodParameters> 
       <x:Type TypeName="io:Parity" /> 
      </ObjectDataProvider.MethodParameters> 
     </ObjectDataProvider> 

    </Window.Resources> 
의 캐릭터 representaion로 ComboBox을 채우기 위해 GetNames을 사용할 수 있습니다

다음 ComboBox에 바인딩

<ComboBox ItemsSource="{Binding Source={StaticResource ParityValues}}" /> 
(210)

결과 :

enter image description here

+0

고맙습니다. – Thomas

1

올바른 경로에 바인딩해야합니다. 데이터 컨텍스트를 설정했지만 표시 할 속성을 지정하지 않았을 수 있습니다.

표시하려는 바운드 컨텍스트의 부분과 '선택'하고 싶은 부분을 지정해야합니다.

WPF Combobox DisplayMemberPath

+0

당신이 물건을위한 MVVM 모델을 확인 할 수 있습니다, 그것은보기 '오프 피드'하는 포함 된 클래스를 가진 훌륭한입니다. – BaconSah

+0

나는 전송 속도에 대한 경로도 사용하지 않았다. 이것은 똑같은 것처럼 보이며 작동합니다. – Thomas

+0

알았어. 감사. – Thomas