일반적으로 콤보박스 아이템들을 xaml상에 일일이 적어주는 경우가 많은데요.
아래와 같이 특정 클래스의 프러퍼티가 콤보박스에 자동으로 출력되게하려면 어떻게 할까요?
이 글을 읽기 전 선수 지식 포스팅
1) 기본 layout
//MainWindow.xaml
우선 ComboBox 태그에 x:Name을 추가해줍니다. 저는 Combolist라는 이름을 넣어줬습니다.
이는 code-behind단에 Combolist.ItemSource = 우리가넣고싶은 배열(or 리스트) 형태로 할당하기 위함입니다.
(ItemSource는 배열 형태의 값만 받기 때문이죠.)
그렇다면 여기서 우리가넣고싶은배열(리스트)이 무엇일까요?
바로 클래스의 프러퍼티들이죠.
그럼 이 클래스의 프러퍼티들을 배열 형태로 만들어줘야 하는데요.
이때 사용하는 것이 GetProperties()메소드입니다.
하지만 이 메소드는 쓰고싶다고 바로 사용할 수는 없습니다.
Type 클래스 형태에서만 지원되는 메소드이기 때문입니다.
먼저 Type형태로 변환시켜주기 위해 typeof()로 감싸줍니다.
그러면 아래와 같이 class Type으로 타입이 변경이 됩니다.
그 후 변경된 데이터타입을 가지고 Get까지만 타이핑 하면 관련 메소드 들이 새로 생깁니다.
그 중에 우리가 사용하고 싶은 GetProperties도 있네요.
자 그럼 이 메소드를 이용해 c# 코드로 작성해 보겠습니다.
2) 코드비하인드단
//MainWindow.xaml.cs
코드로 작성하면 위와 같습니다.
1. 우리가 출력하고 싶은 프러퍼티들은 Player클래스에 있기 때문에, 해당 클래스를 typeof()로 감싸서 type클래스 형태로 바꿔줍니다.
2. 그리고 GetProperties() 메소드를 통해 각각의 프러퍼티들을 배열 형태로 만들어줍니다.
3. 최총적으로 ItemSource에 할당 시킵니다.
하지만 출력값을 보면 프러퍼티명뿐만 아니라 타입들까지 적혀 나오는 지저분한 형태입니다.
output:
이름만 뽑기 위해선 어떻게 해야 할까요?
Name 속성값에 접근하면 됩니다.
무슨말인지 foreach문을 통해 확인해보겠습니다.
.GetProperties()를 통해 얻은 각각의 프러퍼티들은 Name이라는 속성값을 포함하고 있습니다.
즉, 이 Name값으로 접근하면 이름만 쏙 뽑아 올 수 있는거죠.
저는 이러한 작업을 간결하게 하기 위해 Linq Select문을 이용해보았습니다.
'c# > wpf' 카테고리의 다른 글
[c# wpf] ObservableCollection란? (1) | 2022.06.24 |
---|---|
[c# wpf] 리스트뷰 출력 값에 % 붙히기(간단한 방법) (1) | 2022.06.23 |
[c# wpf] 콤보박스(combobox) 사용방법 (1) | 2022.06.20 |
[c# wpf] xaml에서 class 초기값 설정 방법 (1) | 2022.06.20 |
[c# wpf] ListView 내용 편집,수정 하는법(with IValueConverter) (0) | 2022.06.10 |
댓글