µ¥ÀÌÅÍ ¹ÙÀεù 3

Áö±Ý±îÁö´Â UI°¡ ¹Ù²ð¶§ Binding ¼Ò½º°¡ ¾÷µ¥ÀÌÆ® µÇ´Â °ÍÀ» È®ÀÎ ÇÏ¿´´Ù.
À̹ø¿¡´Â Binding ¼Ò½º°¡ ¾÷µ¥ÀÌÆ® µÇ¸é UI°¡ ¹Ù²îµµ·Ï Çغ¸ÀÚ.

INotifyPropertyChanged¸¦ ÀÌ¿ëÇÑ ¹ÙÀεù ¼Ò½º ¾÷µ¥ÀÌÆ®

TextBoxÀÇ Æ÷Ä¿½º°¡ ¹Ù²î¸é Label °ªµµ °°ÀÌ ¹Ù²ï´Ù.
¹öÆ°Àº Æ÷Ä¿½º À̵¿À» À§ÇØ Ãß°¡ µÇ¾ú´Ù.
½ÇÇà °á°ú È­¸éÀ» ¸ÕÀú º¸ÀÚ.

<Canvas>
    <TextBox Canvas.Left="34" Canvas.Top="53" Height="22" Name="textBox1" Width="125" Text="{Binding Message}"/>
    <Button Canvas.Left="34" Canvas.Top="93" Content="Button" Height="27" Name="button1" Width="120" />
    <Label Canvas.Left="36" Canvas.Top="12" Height="28" Name="label1" Width="83" Content="{Binding Message}" />
</Canvas>

Text="{Binding Message}

TextBoxÀÇ Text¿¡ Message¸¦ ¹ÙÀεù ÇÑ´Ù.

Content="{Binding Message}

LabelÀÇ Content¿¡ Message¸¦ ¹ÙÀεù ÇÑ´Ù.

using System.ComponentModel;

namespace BindingDemo
{
    /// <summary>
    /// MainWindow.xaml¿¡ ´ëÇÑ »óÈ£ ÀÛ¿ë ³í¸®
    /// </summary>
    public partial class MainWindow : Window, INotifyPropertyChanged
    {
        private string message;
        public string Message
        {
            get { return message; }
            set
            {
                message = value;
                OnPropertyChanged("Message");
            }
        }

         public MainWindow()
        {
            InitializeComponent();

             this.DataContext = this;
        }

        public event PropertyChangedEventHandler PropertyChanged;

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

using System.ComponentModel;

INotifyPropertyChanged¸¦ »ç¿ëÇϱâ À§Çؼ­ ComponentModelÀ» using ÇÑ´Ù.

public partial class MainWindow : Window, INotifyPropertyChanged

INotifyPropertyChanged¸¦ »ó¼ÓÇÑ´Ù.

OnPropertyChanged("Message");

Message°¡ ¾÷µ¥ÀÌÆ® µÇ¸é ´Ù¸¥ ¹ÙÀεù µÈ ¸ðµç ÄÁÆ®·ÑÀ» ¾÷µ¥ÀÌÆ® Çϱâ À§ÇØ OnProperty( )¸¦ È£ÃâÇÑ´Ù.

public event PropertyChangedEventHandler PropertyChanged;

INotifyPropertyChanged ÀÎÅÍÆäÀ̸¦ »ó¼ÓÇϸé À̺¥Æ® PropertyChanged´Â ¹Ýµå½Ã Á¤ÀÇ µÇ¾î¾ß ÇÑ´Ù.

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

TextBoxÀÇ ÀÔ·ÂµÈ ¹®ÀÚ¿­ÀÌ ¹Ù²î¸é ¹ÝÀεù µÈ Message ¼Ó¼ºÀÌ ºÒ¸°´Ù.
Message ¼Ó¼ºÀº OnPropertyChanged( ) ¸Þ½îµå¸¦ È£ÃâÇÑ´Ù.
OnProertyChanged ¸Þ½îµå¾ÈÀÇ PropertyChanged´Â ¸ðµç ÄÁÆ®·ÑÀÌ ¾÷µ¥ÀÌÆ®·Î µÇµµ·Ï ÇÑ´Ù.

´Ù¿î·Îµå : BindingDemo_PropertyChanged.zip

 

UpdateSourceTrigger·Î Áï½Ã ¾÷µ¥ÀÌÆ®

Áö±Ý ±îÁö´Â Æ÷Ä¿½º°¡ ¹Ù²î¸é ¶óº§ÀÇ °ªÀÌ ¾÷µ¥ÀÌÆ® µÇ¾úÁö¸¸ Áï½Ã ¾÷µ¥ÀÌÆ® µÇµµ·Ï Çغ¸ÀÚ.
XAML ÆÄÀϸ¸ ¼öÁ¤ÇÑ´Ù.

<Canvas>
    <TextBox Canvas.Left="34" Canvas.Top="53" Height="22" Name="textBox1" Width="125" Text="{Binding Message, UpdateSourceTrigger=PropertyChanged}"/>
    <Label Canvas.Left="36" Canvas.Top="12" Height="28" Name="label1" Width="83" Content="{Binding Message}" />
</Canvas>

UpdateSourceTrigger·Î ¾÷µ¥ÀÌÆ® ½Ã±â¸¦ Á¶Á¤ ÇÒ ¼ö ÀÖ´Ù.

Text="{Binding Message, UpdateSourceTrigger=PropertyChanged}

XAMLÀÇ UpdateSourceTrigger¸¦ PropertyChanged·Î ÇÏ¿© Áï½Ã ¾÷µ¥ÀÌÆ® µÇµµ·Ï ÇÏ¿´´Ù.

UpdateSourceTrigger¿¡´Â ´ÙÀ½°ú °°Àº ¼³Á¤ÀÌ ÀÖ´Ù.

¸â¹ö À̸§ ¼³¸í
Default

±âº» UpdateSourceTrigger ÀÇ °ªÀº ¹ÙÀεù ´ë»ó ¼Ó¼ºÀÌ´Ù.
´ëºÎºÐÀÇ ±âº»°ªÀº Á¾¼Ó¼º ¼Ó¼º PropertyChangedÀÌ´Ù.
Text ¼Ó¼ºÀÇ ±âº» °ªÀº LostFocusÀÌ´Ù.

Explicit

¼Ò½º ÄÚµå»ó¿¡¼­ UpdateSource ¸Þ¼­µå È£Ãâ½Ã Binding ¼Ò½º ¾÷µ¥ÀÌÆ®

LostFocus ÄÁÆ®·Ñ Æ÷Ä¿½º°¡ ¹Ù²î¾úÀ» ¶§ Binding ¼Ò½º ¾÷µ¥ÀÌÆ®
PropertyChanged Binding µÈ ÄÁÆ®·ÑÀÇ ¼Ó¼º °ªÀÌ ¾÷µ¥ÀÌÆ® µÇ¸é Binding ¼Ò½ºµµ Áï½Ã ¾÷µ¥ÀÌÆ® µÈ´Ù.

´Ù¿î·Îµå : BindingDemo_UpdateSourceTrigger.zip

 

´Ù¸¥ ÄÁÆ®·ÑÀÇ ¼Ó¼º ¹ÙÀεù Çϱâ

XAML¿¡¼­ ´Ù¸¥ ÄÁÆ®·ÑÀÇ ¼Ó¼º¸¦ Á÷Á¢ ¹ÙÀεù Çؼ­ ¾÷µ¥ÀÌÆ® ÇÒ ¼öµµ ÀÖ´Ù.
¼Ò½º ¼öÁ¤¾øÀÌ XAML¸¸ Á¶ÀÛÇؼ­ Àû¿ëÇغ»´Ù.

½½¶óÀ̵å¹Ù¸¦ ¿òÁ÷À̸é ÅؽºÆ® ºí·ÏÀÌ °°ÀÌ ¾÷µ¥ÀÌÆ® µÇµµ·Ï Çغ»´Ù.

¸ð´Â ÄÁÆ®·ÑÀ» »èÁ¦ÇÏ°í TextBlock ÇÑ °³, Slider ÇÑ °³¸¦ ¹èÄ¡ÇÑ´Ù.
Slider À̸§Àº mySlider·Î ÇÑ´Ù.

INotifyPropertyChanged °ü·ÃµÈ ¼Ò½º´Â ÁÖ¼®Ã³¸®ÇÑ´Ù.

<Canvas>
    <Slider Canvas.Left="15" Canvas.Top="24" Height="25" Name="mySlider" Width="189" />
    <TextBlock Canvas.Left="23" Canvas.Top="64" Height="23" Width="70" Text= "{Binding Value, ElementName = mySlider}" />
</Canvas>

Text= "{Binding Value, ElementName = mySlider}"

´Ù¸¥ ÄÁÆ®·ÑÀÇ ¼Ó¼ºÀ» ¹ÙÀεù ÇÏ´Â °æ¿ì ElementName¿¡ ´ë»ó ÄÁÆ®·ÑÀÇ À̸§À» ¼³Á¤ÇÑ´Ù.
½½¶óÀÌµå ¹Ù°¡ ¿òÁ÷À̸é TextBlockµµ °°ÀÌ ¾÷µ¥ÀÌÆ® µÈ´Ù.

¾î¶² ¼Ò½º ¼öÁ¤µµ ¾øÀÌ XAML ¸¸À¸·Î °¡´ÉÇÏ´Ù.

´Ù¿î·Îµå : BindingDemo_ElementName.zip

Âü°í)
http://cswpf.seesaa.net/index-6.html