2010-04-09 3 views
6

this very related question here on SO을 읽었으며 답변의 링크 때문에 매우 유용했습니다. 지금 막 추가 단계로 가고 MVVM 패턴으로 모든 작업을 수행하는 데 문제가 있습니다.WPF + MVVM의 ComboBox에 대한 열거 형 데이터 바인딩

의 내가 내 뷰 모델을, 그리고 (또는 모델)을 열거 정의 할 수 있다고 가정 해 봅시다 : 내 GUI에서 콤보 상자에이 데이터 바인딩 할

public enum MyTypes { Type1, Type2, Type3 }; 

. 이 기사에 따르면 ObjectDataProvider를 사용하여 MyTypes에서 Enum.GetValues ​​() 메서드를 호출합니다. 그래서 MyTypes를 MethodParameter로 전달해야합니다. 그런데 어떻게 그 타입을 통과 시켰습니까? 나는 XAML에 네임 스페이스에 대한 참조를 추가하는 등, 다양한 방법을 시도했다 :

<Window.Resources> 
     <ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}" x:Key="TipHandlingValues"> 
      <ObjectDataProvider.MethodParameters> 
       <!-- what goes here? it's totally wrong. --> 
       <my:MyTypes /> 
      </ObjectDataProvider.MethodParameters> 
     </ObjectDataProvider> 
    </Window.Resources> 

거의 아무것도 난이 컴파일 넣어 없습니다. 누구든지이 작은 장애물을 극복하는 방법을 알고 있습니까?

답변

4

가장 간단한 방법은 코드에서이 줄을 추가하는 것입니다

DataContext = Enum.GetValues(typeof(MyTypes)); 

다른 옵션은 열거에서 값의리스트를 마크 업 확장을 추가하는 것입니다.

+0

수 있습니다 그 가장 간단하지만 내 DataContext는 내 ViewModel이므로 내 명령 및 기타 콤보 상자를 모두 바인딩하는 방법이므로 적절하지 않다고 생각합니다. 나는 단지 하나의 콤보 박스가 아닌 다른 GUI 요소를 가지고있다. "다른 옵션"에 관해서는, 내가 질문에 게시 한 마크 업이 열거 형에서 값 목록을 생성하는 방법이라고 생각했습니다. – Dave

+0

순수 XAML로 수행 할 방법이 없을 수 있습니다. 일반 C#을 사용하면 훨씬 쉽게 처리 할 수 ​​있습니다. ViewModel에서 MyTypesValues라는 속성을 만들고 그 다음에 바인딩하십시오. ({Binding MyTypesValues}). – Andrey

관련 문제