C# (29) 썸네일형 리스트형 [MAKE GPT C# 라이브러리] JsonHelper WPF나 C# 프로젝트를 만들다 보면 JSON 직렬화/역직렬화 코드를 정말 자주 쓰게 됩니다.처음에는 그냥 이렇게 씁니다.var json = JsonSerializer.Serialize(model);var model = JsonSerializer.Deserialize(json);그런데 프로젝트가 조금만 커지면 바로 이런 문제가 생깁니다.“enum을 문자열로 저장하고 싶은데?”“null 값은 JSON에 안 나오게 하고 싶은데?”“대소문자 다른 JSON도 받을 수 있어야 하는데?”“IPAddress나 IPEndPoint는 어떻게 직렬화하지?”“매번 JsonSerializerOptions 만들기 귀찮은데?”이럴 때 공통으로 쓰기 좋은 Helper가 바로 JsonHelper입니다.이번 글에서는 System.Te.. [MAKE GPT C# 라이브러리] ImageHelper WPF 프로젝트를 만들다 보면 이미지 데이터를 파일 경로가 아니라 byte 배열로 다뤄야 하는 경우가 꽤 자주 있습니다.예를 들면 이런 상황입니다.DB에 저장된 이미지 byte[]를 화면에 보여줘야 할 때API에서 받은 JPEG 바이너리 데이터를 Image 컨트롤에 바인딩해야 할 때소켓이나 스트림으로 받은 이미지 데이터를 즉시 표시해야 할 때썸네일 이미지를 파일로 저장하지 않고 메모리에서 바로 처리하고 싶을 때이때 WPF의 Image.Source는 보통 BitmapImage나 ImageSource 타입을 사용합니다.그래서 byte[] 데이터를 바로 화면에 보여주려면byte[] → MemoryStream → BitmapImage 변환 과정이 필요합니다.이번 글에서는 이 작업을 간단하게 처리하는 ImageH.. [MAKE GPT C# 라이브러리] EnumHelper [MAKE GPT C# 라이브러리] EnumHelperWPF 프로젝트를 만들다 보면 enum을 단순한 분기 값으로만 쓰기 아까운 순간이 있습니다.예를 들어 CCTV 상태, 알람 상태, 버튼 상태, 장비 상태처럼화면에서 색상까지 같이 표현해야 하는 값들이 있죠.LIVEDEADNOT_USEDNOT_AVAILABLE이런 값을 화면에 보여줄 때마다 switch문으로 색상을 매핑하다 보면 코드가 금방 지저분해집니다.switch (status){ case DeviceStatus.Live: return "#2ECC71"; case DeviceStatus.Dead: return "#E74C3C";}처음에는 별문제 없어 보이는데,상태 값이 늘어나고 여러 화면에서 같은 색상을 써야 하는.. [MAKE GPT C# 라이브러리] ControlHelper WPF에서 VisualTree 자식 컨트롤 찾기: ControlHelper로 타입과 Name 기준 검색하기WPF로 화면을 만들다 보면 이런 순간이 꼭 온다.“이 UserControl 안에 있는 특정 TextBox를 코드에서 찾아야 하는데?”“템플릿 안에 들어간 Button을 어떻게 가져오지?”“타입만으로 찾고 싶은데, 같은 타입이 여러 개라 Name까지 같이 보고 싶다…”MVVM을 쓰다 보면 코드비하인드를 최대한 줄이는 게 맞지만, 실무에서는 템플릿 내부 컨트롤 접근, 동적 UI 처리, 커스텀 컨트롤 보조 로직 때문에 VisualTree를 직접 탐색해야 하는 경우가 종종 있다.이럴 때 간단하게 만들어두면 꽤 자주 쓰이는 유틸이 바로 ControlHelper다.✅ TL;DR이 글에서는 WPF에서 다음 두 .. [MAKE GPT C# 라이브러리] InverseBooleanToVisibilityConverter [MAKE GPT C# 라이브러리] InverseBooleanToVisibilityConverterWPF로 화면을 만들다 보면 bool 값에 따라 UI를 보여주거나 숨기는 상황이 정말 자주 나온다.예를 들면 이런 경우다.public bool IsLoading { get; set; }IsLoading이 true일 때는 로딩 화면을 보여주고, false일 때는 실제 콘텐츠를 보여주고 싶다.이럴 때 WPF에는 기본으로 제공되는 BooleanToVisibilityConverter가 있다.이 Converter는 true면 Visible, false면 Collapsed로 바꿔준다.그런데 실무에서는 반대 상황도 꽤 자주 나온다.IsLoading == true → 실제 콘텐츠 숨김IsLoading == false →.. [MAKE GPT C# 라이브러리] EnumConverter [MAKE GPT C# 라이브러리] EnumConverterWPF 프로젝트를 만들다 보면 Enum을 화면에 보여줘야 하는 순간이 정말 자주 온다.예를 들면 이런 상황이다.public enum ServerStatus{ Normal, Warning, Error}코드에서는 Normal, Warning, Error처럼 Enum으로 관리하는 게 깔끔하다.그런데 화면에서는 그대로 보여주기 애매하다.NormalWarningError사용자 입장에서는 이런 값보다 아래처럼 보이는 게 훨씬 자연스럽다.정상경고오류또 어떤 화면에서는 Enum 값에 따라 특정 UI를 보여주거나 숨겨야 하고, 어떤 화면에서는 Enum 값에 따라 색상을 바꿔야 한다.처음에는 ViewModel에서 switch문으로 처리하기 쉽다.p.. [MAKE GPT C# 라이브러리] PasswordInput [MAKE GPT C# 라이브러리] PasswordInputWPF로 로그인 화면을 만들다 보면 비밀번호 입력창은 거의 무조건 들어간다.처음에는 그냥 이렇게 넣으면 끝날 것 같은데, MVVM 패턴으로 ViewModel에 비밀번호를 바인딩하려는 순간 살짝 막힌다.이렇게 쓰고 싶은데 WPF의 PasswordBox.Password는 일반적인 DependencyProperty가 아니라서 바인딩이 되지 않는다.결국 화면마다 PasswordChanged 이벤트를 걸고, code-behind에서 값을 꺼내고, ViewModel에 전달하는 코드를 반복하게 된다.처음 한두 번은 괜찮은데 로그인 화면, 사용자 생성 화면, 비밀번호 변경 화면, 관리자 인증 팝업처럼 비밀번호 입력 UI가 여러 군데 생기면 똑같은 코드가 계속 .. [MAKE GPT C# 라이브러리] CalendarControl [MAKE GPT C# 라이브러리] CalendarControlWPF에서 기본 Calendar 컨트롤을 쓰다 보면 처음에는 꽤 편하다.그런데 실제 프로그램을 만들다 보면 금방 아쉬운 부분이 생긴다.예를 들면 이런 상황이다.날짜는 선택되는데 시간 정보는 같이 유지하고 싶다.녹화가 있는 날짜만 하이라이트하고 싶다.녹화가 없는 날짜는 클릭하지 못하게 막고 싶다.이전/다음 달 날짜는 흐리게 보이거나 아예 숨기고 싶다.토요일은 파란색, 일요일은 빨간색으로 표시하고 싶다.요일 헤더 색상도 강제로 통일하고 싶다.WPF 기본 Calendar만으로도 어느 정도 스타일링은 가능하지만,이런 요구사항이 하나씩 붙기 시작하면 XAML 스타일, Converter, code-behind, ViewModel 로직이 여기저기 흩어지기.. 이전 1 2 3 4 다음