반응형

안녕하세요, 츄르 사려고 코딩하는 집사! 코집사입니다.

 

1. Data Context란?

     - 데이터 바인딩을 할 때, 하나의 객체를 여러 개로 바인딩을 하려면 Binding ElementName을 반복해서 사용하는

       번거로움을 가지고 있습니다. 

     - 그래서, 위와 같은 문제를 해결하기 위해, 부모 엘리먼트에 Data Context를 줘서 그 부모를 데이터 바인딩을

       할 수 있게 해줍니다.

     - 아래의 예를 보면 쉽게 알 수 있습니다.

 

 

2. Data Context 예제

     - 1개의 Stack Panel 안에 다시 DockPanel.Dock를 생성하여 DockPanel을 부모 엘리먼트로 사용

 

 

3. 소스 코드

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

mc:Ignorable="d"

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

    <StackPanel DataContext="StackPanel Context">

        <DockPanel DataContext="DockPanel Context">  // DockPanel 안에 Textbox 3개가 DockPanel의 부모 엘리먼트

            <TextBox DockPanel.Dock="Top"

                Text="{Binding Mode=OneWay}"/>

            <TextBox DockPanel.Dock="Top"

                Text="{Binding Mode=OneWay}"/>

            <TextBox DockPanel.Dock="Top"

                Text="{Binding Path=Length,

                Mode=OneWay}"/>

        </DockPanel>

    </StackPanel>

</Window>

4. 설명

위에서, DockPanel의 DataContext를 지우게 되면, 위의 StackPanel의 DataContext를 부모 엘리먼트로 인식하여 StackPanel의 text를 바인딩하게 된다.

 

5. 결과

 

6. 추가적인 예제

XAML 부분에서 Data Context를 사용하지 않고, beindCode 부분에서 

아래의 소스 코드 같이 코딩하고, 실행해도 된다.

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

 

namespace WpfApp7

{

    /// <summary>

    /// MainWindow.xaml에 대한 상호 작용 논리

    /// </summary>

    public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

            this.DataContext = "this is window"; // this.DataContext = this; 해도 상관 없음

        }

    }

}

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기