Blazor에서 목록에 쉽게 선택 속성을 추가하는 방법

간단한 팁입니다.

보통 조회한 목록은 정보 자체이기 때문에 항목의 선택 유무라던가 화면 관련된 메타 속성을 적용할 수 없어 별도 구조를 만들어야 합니다.
간단한 접근법으로는 별도의 구조를 만들어 위치 인덱스나 사전으로 목록과 연동할 수 있는데 매번 코드량이 많아지고 실수할 여지가 있으므로 좋은 방법은 아닌 것 같습니다.

최근에 Mapster라는 개체 매핑 라이브러리를 알게 되었는데 이곳에도 @파란매 님이 소개를 해주셨었네요.

AutoMapper와 유사한 기능을 제공하지만 단순한 확장(상속)을 통한 매핑, 그러니까 위의 요구 처럼 추가 속성을 부여해야 할 때 별도의 설정 없이 사용할 수 있어서 딱입니다.

기존 목록을 IEnumerable<UserInfo>라고 합시다. 사용자 정보를 읽고 그 목록을 할 때 선택 유무를 체크하고 싶습니다. 이럴 때 다음과 같이 사용할 수 있습니다.

먼저 기존 UserInfo를 상속 받습니다.

class SelectedUserInfo : UserInfo
{
    public bool IsSelected { get; set; }
}

이제 읽어온 목록이 list라고 했을 때 selectableList는 Mapster로 다음과 같이 쉽게 만들 수 있습니다.

selectableList = list.Adapt<IList<SelectedUserInfo>>();

끝입니다. 이제 selectableList를 화면에 표현하고 선택된 항목을 사용하려 할 때 다음 처럼 사용할 수 있습니다.

var selectedUsers = selectableList.Where(x => x.IsSelected == true);
5개의 좋아요