WPF 개발, 연습 토론 페이지 생성

WPF(Windows Presentation Foundation)는 윈도우 애플리케이션을 디자인하고 개발하는 데에 매우 유용한 기술입니다. 이번 강좌에서는 WPF를 사용하여 간단한 토론 페이지를 만드는 방법에 대해 알아보겠습니다. 이 강좌는 WPF의 기본 개념과 데이터 바인딩, 이벤트 처리, 사용자 정의 컨트롤, MVVM(Model-View-ViewModel) 패턴 등을 활용한 실제 프로젝트를 다루게 됩니다.

1. WPF란 무엇인가?

WPF는 마이크로소프트에서 개발한 UI 프레임워크로, .NET Framework를 기반으로 합니다. WPF를 사용하면 고급 사용자 인터페이스를 쉽고 빠르게 만들 수 있으며, 벡터 그래픽스와 스타일링, 템플릿 기능으로 시각적으로 매력적인 애플리케이션을 개발할 수 있습니다.

2. WPF의 주요 특징

  • 기본적인 XAML(Extensible Application Markup Language) 기반의 UI 설계
  • 데이터 바인딩을 통한 효율적인 UI 작업
  • MVVM 패턴을 통한 코드 분리 및 유지 보수성 향상
  • 3D 그래픽, 애니메이션 등 다양한 multimedia 기능
  • 디자인과 개발의 효율적인 협업 지원

3. 토론 페이지 설계

이번 프로젝트에서는 다음과 같은 기능을 가진 토론 페이지를 설계합니다.

  • 사용자가 의견을 입력할 수 있는 텍스트 박스
  • 등록 버튼을 클릭하면 의견이 리스트에 추가됨
  • 등록된 의견을 삭제할 수 있는 버튼 제공

4. 프로젝트 설정

비쥬얼 스튜디오를 열고 새로운 WPF 애플리케이션 프로젝트를 생성합니다. 프로젝트의 이름은 “DiscussionPage”로 설정합니다. 기본적으로 생성된 MainWindow.xaml 파일에서 UI를 설계할 수 있습니다.

5. XAML UI 디자인


<Window x:Class="DiscussionPage.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="토론 페이지" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <StackPanel Orientation="Horizontal">
            <TextBox x:Name="CommentTextBox" Width="600" Height="30" Margin="10" PlaceholderText="의견을 입력하세요..." />
            <Button x:Name="SubmitButton" Content="등록" Width="80" Height="30" Click="SubmitButton_Click" Margin="10"/>
        </StackPanel>

        <ListBox x:Name="CommentsListBox" Grid.Row="1" Margin="10" />
    </Grid>
</Window>

6. 코드 비하인드

UI가 준비되었으니, 이제 C# 코드를 작성하여 사용자의 입력을 처리할 준비를 합니다. MainWindow.xaml.cs 파일에서 아래와 같이 작성합니다.


using System;
using System.Collections.ObjectModel;
using System.Windows;

namespace DiscussionPage
{
    public partial class MainWindow : Window
    {
        public ObservableCollection<string> Comments { get; set; }

        public MainWindow()
        {
            InitializeComponent();
            Comments = new ObservableCollection<string>();
            CommentsListBox.ItemsSource = Comments;
        }

        private void SubmitButton_Click(object sender, RoutedEventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(CommentTextBox.Text))
            {
                Comments.Add(CommentTextBox.Text);
                CommentTextBox.Clear();
            }
            else
            {
                MessageBox.Show("의견을 입력해주세요.", "경고", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
        }
    }
}

7. 코드 설명

위의 코드에서 가장 중요한 부분은 ObservableCollection을 사용하여 리스트박스와 데이터 바인딩을 수행하는 것입니다. 사용자가 의견을 제출했을 때, 입력된 의견이 리스트에 추가되고 그 결과가 실시간으로 UI에 반영됩니다.

8. 기능 확장 – 삭제 기능 추가

사용자가 등록한 의견을 삭제할 수 있는 기능을 추가해 보겠습니다. 삭제를 위해 리스트박스에서 선택된 항목을 제거할 수 있는 버튼을 추가합니다.


<Button x:Name="DeleteButton" Content="삭제" Width="80" Height="30" Click="DeleteButton_Click" Margin="10"/>

9. 삭제 버튼 이벤트 핸들러 추가


private void DeleteButton_Click(object sender, RoutedEventArgs e)
{
    string selectedComment = (string)CommentsListBox.SelectedItem;
    if (selectedComment != null)
    {
        Comments.Remove(selectedComment);
    }
    else
    {
        MessageBox.Show("삭제할 의견을 선택하세요.", "경고", MessageBoxButton.OK, MessageBoxImage.Warning);
    }
}

10. 최종 점검 및 실행

모든 코드와 UI가 완료되었습니다. 이제 프로젝트를 실행하여 구현한 기능을 테스트해볼 수 있습니다. 사용자가 의견을 입력하고 등록하면 리스트에 추가되며, 선택한 의견은 삭제할 수 있습니다.

11. 추가 기능 고려사항

이제 프로젝트가 기본적인 기능을 가지고 있지만, 추가로 고려할 수 있는 몇 가지 기능은 다음과 같습니다:

  • 의견에 대한 댓글 기능
  • 댓글에 대한 좋아요 기능
  • 의견 작성자의 이름 필드 추가
  • 웹 애플리케이션으로 확장하기 위한 API 연결

12. 마무리

이번 강좌를 통해 WPF를 사용하여 간단한 토론 페이지를 작성해보았습니다. WPF의 기본 개념과 데이터 바인딩, 그리고 이벤트 처리와 MVVM 패턴의 중요성을 배울 수 있는 좋은 기회가 되었기를 바랍니다.

앞으로도 WPF를 활용한 더 많은 프로젝트와 실습을 통해 기술을 확장해 나가길 바랍니다. 예를 들어, 이 프로젝트를 발전시켜 웹 애플리케이션으로 변경할 수도 있습니다.

여러분의 응원과 피드백을 기다립니다. 행운을 빕니다!