■ DataContext란?
데이터 바인딩을 위한 소스 객체를 명시하는 속성
DataContext로 지정된 객체의 속성을 소스 객체로 사용할 수 있다.
■ DataContext 사용 방법
- 필요한 형태의 Model Class 만들어서 사용
using System.Windows;
namespace DataContextEx
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
User user = new User();
this.DataContext = user;
}
}
}
· MainWindow의 DataContext 속성에 User Class로 생성한 객체 할당
· User Class의 속성을 바인딩하여 사용 가능
- MainWindows 직접 사용
using System.Windows;
namespace DataContextEx
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
}
}
· MainWindow의 DataContext 속성에 this 할당
· MainWindow의 자식 컨트롤을 바인딩하여 사용 가능
■ Datacontext Example
- Example 설명
· DataContext에 User Class 객체 할당
· MainWindows의 TextBox에 Binding
· TextBox text속성 수정
· 버튼 클릭, Binding된 user 객체의 name, age 정보를 MessageBox로 출력
- MainWindow.xaml
<Window x:Class="DataContextEx.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:DataContextEx"
mc:Ignorable="d"
Title="MainWindow" Height="120" Width="350">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Label Content="Name : " Grid.Row="0" Grid.Column="0"/>
<TextBox Text="{Binding name}" Width="200" Height="20" Grid.Row="0" Grid.Column="1" />
<Label Content="Age : " Grid.Row="1" Grid.Column="0"/>
<TextBox Text="{Binding age}" Width="200" Height="20" Grid.Row="1" Grid.Column="1" />
<Button x:Name="msg_btn" Content="Show Box" Width="100" Height="20"
Grid.Row="2" Grid.Column="1" Click="msg_btn_Click"/>
</Grid>
</Window>
- MainWindow.xaml.cs
using System.Windows;
namespace DataContextEx
{
public partial class MainWindow : Window
{
User user;
public MainWindow()
{
InitializeComponent();
User user = new User()
{
name = "홍길동",
age = 20
};
this.DataContext = user;
}
private void msg_btn_Click(object sender, RoutedEventArgs e)
{
User user = this.DataContext as User;
MessageBox.Show($"name : {user.name}, age : {user.age}");
}
}
}
- User.cs
namespace DataContextEx
{
class User
{
public string name { get; set; }
public int age { get; set; }
}
}
- user 객체 초기화 내용, textbox에 출력
- textbox 수정 전 message box 출력 확인
- textbox 내용 수정
- message box 출력 확인
'개인공부 > WPF' 카테고리의 다른 글
[WPF] 이벤트 라우팅, 터널링(Tunneling), 버블링(Bubbling) (0) | 2022.05.29 |
---|---|
[WPF] 의존 속성(DependencyProperty) (0) | 2022.05.20 |
[WPF] 멀티쓰레드(Multi Thread) (0) | 2022.05.11 |
[WPF] 데이터 바인딩(Data Binding) (0) | 2022.04.26 |
[WPF] Hello World (0) | 2022.04.19 |