무효 클릭 IP 추적 중...
c#/wpf

[c# wpf] ListView 내용 편집,수정 하는법(with IValueConverter)

꼬예 2022. 6. 10.

 

 

 

1. 무엇을 배우나요?

 

 

이번 포스팅에서는 위 그림과 같이 ListView(리스트뷰)에서 특정 컬럼의 내용을 원하는 형태로 변경하는 방법에 대해 알아 보도록 하겠습니다.

 

먼저 설명을 위한 기본 UI 세팅 및 예제 코드에 대해 설명하겠습니다.

 

 

이 글을 읽기 전 선수 지식

 

2. 기본 UI 세팅

//MainWindow.xaml.cs

 

1) 업체 정보를 담을 클래스 생성(CompanyInfo)

 

CompanyInfo클래스

 

2) CompanyInfo 클래스를 담을 리스트 생성

 

리스트생성

 

3) 리스트에 CompanyInfo 객체 담기

 

리스트에클래스추가

 

4) 객체들이 xaml에 출력되도록 .ItemSource에 리스트를 할당

 

xaml과리스트연동

 

여기서 CompanyListViewLitView 엘리먼트 Name에서 가져온것입니다.  

 

//MainWindow.xaml

 

ListViewName설정

 

위와 같이 xaml까지 작성하고 앱을 실행시키면, 사용일 부분이 지저분한 형태로 출력이 됩니다.

이 부분을 깔끔한 형태로 변경하고 싶습니다.

output:

 

중간결과

 

 

3. ListView 내용을 원하는 포맷으로 수정(with IValueConverter)

1) 먼저 클래스를 새로 추가합니다. 이름은 DateConverter로 지어보겠습니다.

 

클래스추가

 

2) IValueConverter 인터페이스 상속

 

IValueConverter상속

 

IValueConverter 를 상속하고나면 빨간줄이 뜰텐데요.

해당 부분커서를 대고 ctrl+. Enter 눌러 필요한 namespace를 추가해줍니다.

 

네임스페이스추가

 

하지만 그 이후에도 여전히 빨간 줄이 뜰겁니다. 왜냐하면 IValueConverter는 인터페이스이기 때문입니다.

(인터페이스 개념이 낯선 분들은 해당 포스팅 참조)

다시말하면 인터페이스에서 작성하라는대로 아직 메서드를 구현하지 않았기 때문에 발생한 에러입니다. 

 

실제로 IValueConverter에 원코드에 들어가보겠습니다.

 

IValueConverter원코드

 

Convert, ConvertBack이라는 메소드가 있습니다.

다시 말하면 IValueConverter를 상속받은 클래스는 이 두 메서드를 반드시 구현해야 한다는 말이 되겠죠?

 

3) 인터페이스에서 구현된 메서드 작성

 

X표가 떠 있는 전구를 클릭 => 인터페이스 구현 버튼을 누르면 자동적으로 메서드가 생성이 됩니다.

 

메서드구현
메서드구현

 

4) 인터페이스 메서드 수정

 

Convert 메서드가 우리가 기존 데이터를 어떻게 바꿀지 로직을 작성하는 공간입니다.

 

코드수정

 

해당 로직을 설명하자면,

추후 xaml에서 설정할테지만 object value 인자로 들어오는 값은 DateTime 타입입니다.

 

그런데 인자로 넘어오면서 object형으로 형변환, 다른말로 박싱을 하게 됩니다.

 

하지만 내용물을 수정하기 위해서는 다시 언박싱을 통해 DateTime 형태로 변경해줘야겠죠.

그래서 (DateTime)value 형태로 명시적으로 다시 형변환을 해준것입니다.

(박싱, 언박싱 개념을 모르시는분은 해당 포스팅을 참조바랍니다.)

 

그 후에 해당 값을 가지고 수정한 값을 리턴 합니다.

 

5) xaml과 Converter 클래스 연동

 

(1) <Window.Resources> 태그를 통해 연동

 

xaml연동

 

local개념

 

여기서 local= "clr-namespace:WpfApp10"은 아래 전체를 가리킵니다.

 

local범위

 

즉 그 안에서 DateConverter라는 이름을 가진 클래스를 찾아 가져오라는 것입니다.

 

추가적으로 x:Key명을 "MyConverter"로 적어주었습니다.

(x:Key가 낯선분들은 StaticResource 포스팅을 보고 오시기바랍니다.)

 

(2) ListView 원하는 컬럼에 연동

 

Converter추가

 

우리가 바꾸고 싶은 위치는 DisplayMemberBinding 값이기 때문에, 기존 바인딩 되어있던 곳에 Convert속성값을 추가해줍니다. 그리고 앞서 <Window.Resources>에 넣어두었던 클래스를 연동시킵니다.

 

output:

 

최종결과

 

우리가 원하는 결과가 잘 출력되는걸 확인할 수 있습니다.

 

 

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글