티스토리 뷰
참고 블로그: 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 |