[WPF] MVVM 패턴으로 WPF 시작하기 - 02 UI 구성 (Grid, ListView, StackPanel)

WPF 시리즈 포스팅을 진행하고 있습니다. 아래 링크를 클릭하시면 연관된 다른 포스트들을 보실 수 있습니다.

 

목록

  1. MVVM 패턴으로 WPF 시작하기 - 01 프로젝트 만들기
  2. MVVM 패턴으로 WPF 시작하기 - 03 ViewModel 구성
  3. MVVM 패턴으로 WPF 시작하기 - 04 Textbox와 ComboBox
  4. MVVM 패턴으로 WPF 시작하기 - 05 Converter

안녕하세요. 데브봉입니다.

오늘은 저번 시간에 이어 WPF 강의 2번째 UI 구성에 관하여 진행하도록 하겠습니다.

 

1. Grid

Grid Panel이라고도 불리며 열과 행으로 테이블 형태의 Layout을 제공합니다. WPF UI를 구성할 때 가장 기초적이며 가장 많이 사용합니다.

 

Row를 두개 만들어서 임직원 리스트와 선택한 임직원의 정보를 보여 주기 위해 RowDefinitions를 사용합니다.

<Window
    x:Class="MyFirstWPFApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:MyFirstWPFApp"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
    </Grid>
</Window>

 

etc-image-0

 

그러면 이렇게 두개로 나눠집니다!

 

 

 

2. ListView

ListView 컨트롤은 각각의 정보를 담고있는 List를 표현하기 위한 컨트롤입니다. 각 아이템들은 ListViewItem으로 표시합니다.

예로 전화번부, 인물 정보라든지 리스트를 표현해야될 때, 사용됩니다.

 

그럼 위 코드에 ListView를 추가해보도록 하겠습니다.

 

( * Binding에 대해서는 다음 장에서 설명하겠습니다)

<Window
    x:Class="MyFirstWPFApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:MyFirstWPFApp"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <ListView
            Grid.Row="0"
            DisplayMemberPath="Name"
            ItemsSource="{Binding People}"
            SelectedItem="{Binding SelectedPerson, Mode=TwoWay}">
        </ListView>
    </Grid>
</Window>

 

Grid.Row

- 로우 번호를 설정합니다. 두개의 로우로 나눴으니 첫번째 로우안에 리스트뷰를 넣겠습니다.

 

DisplayMemberPath

- ItemsSource로 바인딩된 뷰모델에서 어떤 속성을 UI에 표시할지 설정합니다. People로 바인딩된 ItemsSource에서 Name 속성을 보여지게 설정합니다.

 

ItemsSource

- ListView에 보여질 아이템의 소스를 설정합니다. 즉 뷰모델을 설정해주면 됩니다.

 

SelectedItem

- ListView에서 아이템이 선택되면 SeletedItem으로 가게 됩니다. 그때 사용될 뷰모델을 설정합니다.

 

blob

 

나중에 데이터가 들어오면 이런 식으로 ListView가 만들어지게 됩니다.

 

 

 

3. StackPanel

StackPanel은 UI control을 가로를 쭈욱, 세로를 쭈욱 Stack처럼 줄줄이 늘어놓을 수 있게 만들 수 있는 Panel입니다. 한마디로 줄줄이 사탕처럼 말이죠.

 

마지막 부분은 TextBlock 3개를 가로로 늘여놓도록 하겠습니다.

etc-image-2

<Window
    x:Class="MyFirstWPFApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:MyFirstWPFApp"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <ListView
            Grid.Row="0"
            DisplayMemberPath="Name"
            ItemsSource="{Binding People}"
            SelectedItem="{Binding SelectedPerson, Mode=TwoWay}" />
        <StackPanel Grid.Row="1" Orientation="Horizontal">
            <TextBlock Margin="5" Text="{Binding SelectedPerson.Id}" />
            <TextBlock Margin="5" Text="{Binding SelectedPerson.Name}" />
            <TextBlock Margin="5" Text="{Binding SelectedPerson.Gender}" />
        </StackPanel>
    </Grid>
</Window>

이번 포스트는 MVVM 패턴의 뼈대가 되는 UI 구성을 다루어 봤습니다. 다음 시간에는 ViewModel을 구성하여 데이터를 바인딩 해보도록 하겠습니다.

 

etc-image-3