WPF, XAML

(동영상)C#, WPF 데이터바인딩, DataContext를 이용한 TwoWay DataBinding 실습

 

(동영상)C#, WPF 데이터바인딩, DataContext를 이용한 TwoWay DataBinding 실습 

n  XAML XML에서 데이터바인딩을 위한 소스객체는 BindingSource, ElementName 속성을 이용한다.

<!-- ElementName=txt1 대신 Source={x:Reference txt1}가능 -->

<Label HorizontalAlignment="Center" BorderBrush="Black"

BorderThickness="2"

Content="{Binding ElementName=txt1, Path=Text}" />

n  바인딩 소스객체를 명시하는 또 다른 방법이 있는데 DataContext를 이용하면 된다.

n  WPF 프로젝트를 생성 후 콘솔에 사원의 Name, City를 출력해야 하니 프로젝트 속성에서 출력형식을 "콘솔 응용프로그램"으로 설정하자.

n  Emp.cs

namespace 

WpfApp6

{

    public class Emp

    {

        public string Ename

        {

            get;

            set;

        }

 

        public string City

        {

            get;

            set;

        }

    }

}

 

n  MainWindow.xaml

<Window x:Class="WpfApp6.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:WpfApp6"

        mc:Ignorable="d"

        Title="MainWindow" Height="450" Width="800">

    <Grid x:Name="Grid1">

        <Grid.RowDefinitions>

            <RowDefinition Height="Auto"/>

            <RowDefinition Height="Auto"/>

            <RowDefinition Height="Auto"/>

        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="Auto" />

            <ColumnDefinition Width="*"/>

        </Grid.ColumnDefinitions>

        <TextBlock Grid.Column="0" Grid.Row="0">Name:</TextBlock>

        <TextBlock Grid.Column="0" Grid.Row="1">City:</TextBlock>

        <TextBox x:Name="TextBox1" Grid.Column="1"

                 Grid.Row="0" Text="{Binding Path=Ename}"></TextBox>

        <TextBox x:Name="TextBox2" Grid.Column="1"

                 Grid.Row="1" Text="{Binding Path=City}"></TextBox>

        <Button Grid.Column=" 1" Grid.Row="2"  

                Name="button1" Click="OnClicked">Control To Context</Button>

    </Grid>

</Window>

n  MainWindow.xaml.cs

using System.Windows;

namespace WpfApp6

{

    public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

            Emp e = new Emp()

            {

                Ename = "홍길동",

                City = "서울"

            };

            this.DataContext = e;

        }

        private void OnClicked(object sender, RoutedEventArgs args)

        {

            Emp e = this.DataContext as Emp;

            System.Console.WriteLine(e.Ename);

            System.Console.WriteLine(e.City);

        }

 

    }

}

n  실행 화면

최초 실행시 XAML 파일의 Resource절에서 설정한 Emp 클래스 Ename, City 속성을 기본값으로 해서 화면이 로딩된다.

Name, City를 다른 내용으로 입력하면 데이터 바인딩으로 인해 Emp 객체의 Ename, City 속성값이 채워지고 이것을 콘솔화면에 출력했다.

 eb0469448be32ef629be251932a651d4_1597543

 

Comments