티스토리 뷰

C#

[C#]DataBinding 예시

수학소년 2024. 2. 26. 22:47

참고 블로그: https://esound.tistory.com/10

 

WPF Application, 8.0 LTS로 Application을 만들고

TextBox에 숫자를 입력하면 TextBlock에 입력한 값의 두개 값이 표시.

 

1. MainWindow.xmal

<Window x:Class="WpfApp9.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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp9.ViewModels"
        xmlns:viewModel="clr-namespace:WpfApp9.ViewModels" x:Name="window"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <viewModel:MainViewModel />
    </Window.DataContext>
    <Grid>
        <TextBox HorizontalAlignment="Left" Height="120" Margin="130,144,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="210"
                 Text="{Binding Path=Model.Num1, UpdateSourceTrigger=PropertyChanged}"/>
        <TextBlock HorizontalAlignment="Left" Height="120" Margin="430,144,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="225"
                   Text="{Binding Path=Model.Num2}"/>

    </Grid>
</Window>

TextBox에 값이 바꼈을 때 PropertyChanged를 감지하기 위해 TextBox에만 적용

namespace가 "WpfApp9.ViewModels"인 곳에서

DataContext에 "MainViewModel" class를 넣어두고

"MainViewModel" class에 "Model"이라는 Property를 만들어 두고

Model에는 Num1, Num2 Property를 만들어야 함.

2. Models/MainModel.cs

using System.ComponentModel;

namespace WpfApp9.Models
{
    internal class MainModel : INotifyPropertyChanged
    {
        private int num1 = 1;
        private int num2 = 1;

        public int Num1
        {
            get { return num1; }
            set
            {
                num1 = value;
                Num2 = num1 * 2;
            }
        }

        public int Num2
        {
            get { return num2; }
            set
            {
                num2 = value;
                OnPropertyChanged("num2");
            }
        }

        public event PropertyChangedEventHandler? PropertyChanged;

        protected void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}

public int Num1에서 Num2의 값을 바꾸는 라인이 있음

처음에 여기를 java처럼 "num2 = num1 * 2" 로 적었는데 이거 때매 주말동안 DataBinding 예제들 한참 찾아봄..

Num2의 값이 바뀔 때 or Num2의 set함수가 호출됄 때 OnPropertyChanged를 호출해서 화면에 표시한다 함

 

3. ViewModels/MainViewModel.cs

namespace WpfApp9.ViewModels
{
    internal class MainViewModel
    {
        private Models.MainModel _model;

        public MainViewModel()
        {
            _model = new Models.MainModel();
        }

        public Models.MainModel Model
        {
            get { return _model; }
            set { _model = value; }
        }
    }
}

 

'C#' 카테고리의 다른 글

[C#]DataContext를 Mappings.xaml에서 설정하기  (0) 2024.02.29
[C#]Command Binding 예시  (0) 2024.02.27
[C#]의존성 주입 예시  (0) 2024.02.21
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함