전체 글 (159) 썸네일형 리스트형 8-2. WPF 라벨링 툴 개발 기록: MVVM 베이스(ViewModelBase, RelayCommand, MainViewModel) 모든 설명은 주석으로 다 적어놨어요 >_ Infrastructure/MainViewModel.csusing VectorLab.Infrastructure;namespace VectorLab.Views{ internal class MainViewModel : ViewModelBase { private string _title = "VectorLab"; public string Title { get => _title; /* SetProperty가 없으면 set { if (_title == value) return; .. 8-1. C# WPF 라벨링 툴 만들기 + ViewModelBase.cs MVVM 구조로 라벨링 툴 만들기 시작!!1. MVVM 폴더 구조 - Views - ViewModels - Models - Services - Infrastructure 2. MainWindow를 Views로 이동지금 루트에 있는:MainWindow.xamlMainWindow.xaml.cs👉 둘 다 선택 → Views 폴더로 드래그 3. Infrastructure에 MVVM 기본 파일 추가 Infrastructure/ViewModelBase.cs using System.ComponentModel;using System.Runtime.CompilerServices;namespace VectorLab.Infrastructure{ internal class ViewModelBase : INot.. 7. C# 람다식 대신 사용하는 delegate 문법 1. delegate 정의delegate = “여기에 실행할 코드 묶음을 넣어주세요”라는 자리표시자함수 자체를 변수처럼 넘기고 싶을 때 쓰는 문법2. 내가 작성한 코드를 보면// ✅ 람다(=>) 없이 Task.Runstring valueStr = await Task.Run(delegate{ token.ThrowIfCancellationRequested(); return ReadPixelAsString(_band1, col, row);}, token); 여기서 delegate { ... }는:👉 “이 중괄호 안의 코드를 나중에 실행해 주세요”👉 이름 없는 함수 하나를 즉석에서 만든 것 3. delegate를 함수로 풀어 쓰면 이렇게 생김string ReadPixelWorker(){ to.. 6. Raster Band 데이터의 2차원 배열과 (col, row) 좌표 체계 내가 파일의 데이터 Driver = GeoTIFFSize = 7202 x 5593Band = 1Band1 DataType = GDT_ByteGetRasterBand(1) 라는 함수를 사용해서 데이터를 가져왔다.. 근데 왜? 이 함수를 쓰는가? 이 함수를 가지고 무슨 데이터를 가져오려고?? Band band = dataset.GetRasterBand(1); 이 한 줄은:“이 영상에서 1번 밴드에 해당하는 ‘2차원 픽셀 데이터 층’을 가져온다” 여기서 핵심은👉 Band = 이미지 자체가 아니라, 이미지 안의 ‘데이터 레이어’ Band가 가지고 있는 데이터픽셀 값각 (x, y)에 대응되는 숫자 값DataTypeByte / UInt16 / Float32 등NoData 값유효하지 않은 픽셀 값통계 정보Min.. 5. WPF 이미지 처리 - 이미지 타입 구분, 메타데이터, 라이브러리 선택 정리 1. 왜 이미지 타입을 먼저 구분해야 하는가 이미지 처리는 “다 같은 이미지 파일”이 아니다. 겉으로 보기엔 JPG, PNG, TIFF 모두 “이미지”지만, - 내부 구조 - 메타데이터 방식 - 지원 라이브러리 - 처리 난이도 가 완전히 다르다. 특히 WPF에서 이미지를 다룰 때는 어떤 포맷인지 모르고 접근하면: - 메타데이터 조회 중 예외 발생 - 특정 TIFF/GeoTIFF 파일이 열리지 않음 - 좌표 정보(GeoTIFF)가 무시됨 그래서 코드 작성 전에 반드시 해야 할 일은: 1. 이미지 포맷이 무엇인지 정의 2. 그 포맷의 메타데이터 구조 이해 3. 그에 맞는 라이브러리 선택 2. WPF / WIC 개념 정리 WPF (Windows Presentation Foun.. 4. 게시판 만들기 1 — JSON 파일로 저장하는 게시판 구조 설계하기 ⭐ Model, Repository, Service 개념 잡기 ⭐ 개인적으로 게시판 하나 만들 수 있을 정도면 기본적인 건 알 수 있다고 생각 1. 프로젝트 생성 dotnet new console -n MiniBoardcd MiniBoard 2. Model 만들기 (글 하나)Post.cspublic class Post{ public int Id { get; set; } public string Title { get; set; } public string Content { get; set; } public string Author { get; set; } public DateTime CreatedAt { get; set; } public DateTime? UpdatedAt .. 3. WPF 버튼 클릭 + 데이터 바인딩으로 UI 자동 갱신하기 WPF를 처음 공부하면서 가장 헷갈렸던 부분이 있다.“버튼 클릭만 했는데,어떻게 UI가 자동으로 값 바뀌는 걸 알아서 처리하지?” 이번 글에서는이벤트 방식(전통적 방식)데이터 바인딩 + INotifyPropertyChanged를 통해 WPF가 UI를 갱신하는 흐름을 정리한다. 1. 기본 UI 만들기 (버튼 + 텍스트) MainWindow.xaml 여기에서 핵심은 이 한 줄이다.Text="{Binding Message}" TextBlock의 Text는DataContext에 있는 Message 속성과 연결된다. 2. DataContext 설정 + Message 속성 만들기 Main.. 2. JS vs WPF 비교(Routed Event, Handled, MVVM) WPF 공부하면서 생각나는게 JS랑 굉장히 비슷하다고 생각이 들어서 혼동하지 않게 정리! 1. JS 이벤트 흐름 vs WPF 이벤트 흐름 JavaScript (DOM) 의 경우 버튼 클릭:document → 부모 div → 버튼 ← 클릭 흐름:1. 캡처링 (Capturing):부모 → 자식으로 내려가면서 이벤트 전달2. 버블링 (Bubbling):자식 → 부모로 올라가면서 이벤트 전달그리고 event.stopPropagation() 하면 막을 수 있음. WPF (Routed Events) 의 경우 버튼 클릭:Window → Grid → Button ← 클릭 타입 방향JS와 비교Tunneling부모 → 자식CapturingBubbling자식 → 부모Bubbling 기본적으로 버블링 이벤트 (자식.. 이전 1 2 3 4 ··· 20 다음