AI 코딩도구

AI에게 그대로 붙여넣으면 “WPF 로그인 화면”이 빌드 가능한 형태

wins007 2026. 1. 2. 14:42

 


복붙용 마스터 프롬프트 (추천: .NET 8 + CommunityToolkit.Mvvm)

너는 WPF(.NET) 전문가야. 아래 조건을 정확히 지켜서 "로그인 화면"을 구현해줘.

[환경]
- 프로젝트: WPF
- 타겟 프레임워크: .NET 8
- 패턴: MVVM (code-behind 최소화)
- MVVM 라이브러리: CommunityToolkit.Mvvm 사용 (ObservableObject, [ObservableProperty], RelayCommand)
- 추가 NuGet은 CommunityToolkit.Mvvm만 사용 (그 외 금지)

[산출물 형식]
- 파일 단위로 제공:
  1) App.xaml (필요 시)
  2) MainWindow.xaml
  3) MainWindow.xaml.cs (가능하면 최소, DataContext 설정만)
  4) ViewModels/LoginViewModel.cs
  5) Services/FakeAuthService.cs (로그인 시뮬레이션)
- 각 파일은 각각 코드블록으로 분리해서 제공
- 그대로 붙여넣으면 빌드/실행 가능한 최소 예제

[화면 요구사항]
- 화면 구성:
  - 제목: "로그인"
  - TextBox: ID 입력
  - PasswordBox: PW 입력 (보안상 PasswordBox 사용)
  - Button: "로그인"
  - ProgressBar 또는 "로그인 중..." 표시 (IsBusy=true일 때만)
  - 오류 메시지 영역 (ErrorMessage가 있을 때만 표시)
- 레이아웃: 중앙 정렬, 적당한 여백, Grid 기반

[동작 요구사항]
- 검증 규칙:
  - ID: 4자 이상
  - PW: 8자 이상
- 검증 실패 시:
  - 해당 필드 아래에 검증 메시지 표시 (빨간색)
  - 로그인 커맨드는 실행되지 않게 막기
- 로그인 실행 시:
  - IsBusy = true
  - 버튼 비활성화
  - FakeAuthService를 호출하여 Task.Delay(1200)으로 시뮬레이션
  - 성공 조건: id == "admin" && password == "password1234" 일 때 성공
  - 실패 시 ErrorMessage = "아이디 또는 비밀번호가 올바르지 않습니다."
  - finally에서 IsBusy = false

[바인딩/커맨드 요구사항]
- TextBox ID는 TwoWay 바인딩
- PasswordBox는 기본 바인딩이 안 되므로 아래 중 하나로 구현:
  A) Attached Property(PasswordHelper)로 Password를 ViewModel에 바인딩
  또는
  B) PasswordChanged 이벤트를 code-behind에서 받아 VM에 전달 (단, code-behind 최소화)
- LoginCommand는 RelayCommand(또는 AsyncRelayCommand) 사용
- CanExecute는 입력 검증과 IsBusy를 반영

[검증 구현 방식]
- INotifyDataErrorInfo 또는 IDataErrorInfo 중 하나를 사용해서
  XAML에서 빨간 테두리 + 메시지가 자연스럽게 보이게 구현
- 바인딩 실패/오타 없도록 속성명/경로를 정확히 맞출 것

[UI 디테일]
- 기본 컨트롤만 사용
- ErrorMessage TextBlock은 붉은 글씨
- IsBusy 때 ProgressBar는 Indeterminate로 표시

[마무리]
- 바인딩 이름 일치 여부를 스스로 점검해서 제공해줘.
- "실행 방법(어디에 어떤 파일로 넣는지)"도 간단히 마지막에 적어줘.

이제 위 조건대로 전체 코드를 작성해줘.

더 강하게 “바인딩 오류 방지”를 걸고 싶다면 (옵션 한 줄 추가)

프롬프트 맨 끝에 이 줄을 추가해줘:

추가 요구: XAML 바인딩이 조용히 실패하지 않도록, 각 바인딩 경로가 실제 ViewModel 속성과 1:1로 일치하는지 체크리스트 형태로 마지막에 점검 결과도 써줘.