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

¹ÙÀεù Source·Î Á¤Àû °´Ã¼¿Í ¿¬°á

Binding Source ¼Ó¼ºÀ» ÀÌ¿ëÇØ DataContext ÀÌ¿ÜÀÇ °´Ã¼¿Í ¸â¹ö¸¦ Binding ÇÒ ¶§, »ç¿ëÇÑ´Ù.

<Window x:Class="BindingDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:BindingDemo"
        Title="BindingDemo" Height="171" Width="230" DataContext="{Binding}">
    <Canvas>
        <TextBox Canvas.Left="29" Canvas.Top="30" Height="24" Width="99" Text= "{Binding TextName, Source={x:Static local:TestClass.Object}}"/>
        <Button Canvas.Left="32" Canvas.Top="80" Content="Button" Height="23" Name="button1" Width="129" Click="Button_Click" />
    </Canvas>
</Window>

xmlns:local="clr-namespace:BindingDemo" 

´Ù¸¥ °´Ã¼¸¦ Âü°í Çϱâ À§ÇÑ ³×ÀÓ½ºÆäÀ̽º¸¦ ÁöÁ¤ÇÑ´Ù.

Text= "{Binding TextName, Source={x:Static local:TestClass.Object}}"

Binding ÇÒ ¼Ó¼ºÀº TextNameÀÌ´Ù. Source·Î °´Ã¼¸¦ ÁöÁ¤ÇÑ´Ù.
Á¤ÀûÀÎ °´Ã¼´Â {x:Static °´Ã¼} ¿Í °°ÀÌ ÁöÁ¤ÇÑ´Ù. localÀº ¹Ì¸® ¼±¾ðÇÑ clr-namespaceÀÌ´Ù.

namespace BindingDemo
{
    /// <summary>
    /// MainWindow.xaml¿¡ ´ëÇÑ »óÈ£ ÀÛ¿ë ³í¸®
    /// </summary>
    public partial class MainWindow : Window
    {
         public MainWindow()
        {
            InitializeComponent();

             this.DataContext = this;
        }

         private void Button_Click(object sender, RoutedEventArgs e)
         {
             MessageBox.Show(TestClass.Object.TextName);
         }
    }

    public class TestClass
    {
        private static TestClass Instance = new TestClass();
        public static TestClass Object { get { return Instance; } }

        public string TextName { get; set; }

        private TestClass()
        {
        }
    }
}

Á¤Àû ¸â¹ö·Î ¼±¾ðµÈ TestClassÀÇ TextName ¼Ó¼ºÀ» ÀÌ¿ëÇÏ°í ÀÖ´Ù.
½ÇÇàÈ­¸éÀÌ´Ù.

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

 

Binding Converter ÀÌ¿ë

Converter¸¦ ÀÌ¿ëÇÏ¿© Binding ¼Ò½ºÀÇ °ªÀ» »õ·Î¿î Çü½ÄÀ¸·Î º¯È¯ÇÑ´Ù.
À̹ø ¿¹Á¦¿¡¼­´Â 10Áø¼ö¸¦ ÀÔ·ÂÇϸé TextBlockÀ¸·Î 16Áø¼ö·Î º¯È¯µÈ ¹®ÀÚ¿­À» Ãâ·Â ÇÑ´Ù.

<Window x:Class="BindingDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:BindingDemo"
        Title="BindingDemo" Height="171" Width="230" DataContext="{Binding}">
    <Window.Resources>
        <local:HexConverter x:Key="HexConv"/>
    </Window.Resources>
    <Canvas>
        <TextBox Text="{Binding TestValue, UpdateSourceTrigger=PropertyChanged}"
             Width="70" Height="23" Margin="5"
             HorizontalAlignment="Left" VerticalAlignment="Top"/>
        <TextBlock Text="{Binding TestValue, Converter={StaticResource HexConv}}"
               Grid.Row="1" Width="146" Height="23" Margin="5"
               HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Left="0" Canvas.Top="44" />
    </Canvas>
</Window>

<local:HexConverter x:Key="HexConv"/>

CS Äڵ忡 ÀÖ´Â HexConverter¸¦ ÀÚ¿ø µî·ÏÇÏ°í ÀÖ´Ù.

Text="{Binding TestValue, UpdateSourceTrigger=PropertyChanged}"

TextBox°ªÀÌ ¹Ù²î¸é Áï½Ã, TestValue °ªµµ ¹Ù²îµµ·Ï ÇÑ´Ù.

Text="{Binding TestValue, Converter={StaticResource HexConv}}"

TextBlockÀÇ Binding¿¡¼­ Converter¸¦ ¼³Á¤ÇÏ°í ÀÖ´Ù.
HexConv¿¡ ÀÇÇØ 16Áø¼ö·Î º¯È¯ÇÑ´Ù.

using System.ComponentModel;

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

        public MainWindow()
        {
            InitializeComponent();

             this.DataContext = this;
        }

        public event PropertyChangedEventHandler PropertyChanged;

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

    public class HexConverter : IValueConverter
    {
        public object Convert(object value, Type type, object parameter, System.Globalization.CultureInfo culture)
        {
            int v = (int)value;
            return string.Format("0x{0:X2}", v);
        }

        public object ConvertBack(object value, Type type, object parameter, System.Globalization.CultureInfo culture)
        {
            string s = (string)value;
            int v;
            if (int.TryParse(s, System.Globalization.NumberStyles.AllowHexSpecifier, null, out v))
            {
                return v;
            }
            return 0;
        }
    }
}

16Áø¼ö·Î º¯È¯ÇÏ´Â HexConverter¸¦ Á¤ÀÇÇÏ°í ÀÖ´Ù.

BindingÀÇ Converter¿¡ ÁöÁ¤µÈ Ŭ·¡½º´Â IValueConverter ÀÎÅÍÆäÀ̽º¸¦ »ó¼ÓÇؼ­ ±¸ÇöÇÑ´Ù.
IValueConverter´Â Convert, ConvertBackÀÇ µÎ°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù.

Convert°¡ Binding ¼Ò½º ÄÁÆ®·Ñ¿¡ µ¥ÀÌÅÍ Àü´Þ½Ã¿¡ È£ÃâµÇ´Â ¹Ýȯ
ConvertBackÀº ¹Ý´ëÀÇ °æ¿ì È£ÃâµÇ´Â º¯È¯ÀÌ´Ù.

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

 

< ¿¡·¯ ´ëó >

BindingDemo_convert.zipÀÇ °æ¿ì ¾ÐÃàÀ» Ç®¸é ¾Æ·¡¿Í °°Àº ¿¡·¯°¡ ¹ß»ý ÇÒ°ÍÀÌ´Ù.

ºôµå °ü·Ã ¸ðµç µ¥ÀÌÅ͸¦ »èÁ¦ÇÏ¸é ´ÙÀ½°ú °°Àº ¿¡·¯°¡ ¹ß»ý ÇÒ ¼öµµ ÀÖ´Ù.
´Ù½Ã ºôµåÇϸé ÇØ°áµÇ´Â °æ¿ìµµ ÀÖ´Ù.

Á¤ÀǵÇÁö ¾ÊÀº CLR ³×ÀÓ½ºÆäÀ̽ºÀÔ´Ï´Ù. 'clr-namespace' URI´Â ¾î¼Àºí¸®¿¡ Æ÷ÇÔµÇÁö ¾ÊÀº 'BindingDemo' ³×ÀÓ½ºÆäÀ̽º¸¦ ÂüÁ¶ÇÕ´Ï´Ù.

'local:HexConverter' Çü½ÄÀÌ ¾ø½À´Ï´Ù. ¾î¼Àºí¸® ÂüÁ¶°¡ ÀÖ´ÂÁö, ±×¸®°í ÂüÁ¶µÈ ¸ðµç ¾î¼Àºí¸®°¡ ºôµåµÇ¾ú´ÂÁö È®ÀÎÇϽʽÿÀ.

 

Binding ConverterParameter ¼Ó¼º ÀÌ¿ë

ConverterParamter¸¦ ÀÌ¿ëÇÏ¿© °ªÀ» º¯È¯ Ŭ·¡½º·Î ¸Å°³ º¯¼ö¸¦ Àü´ÞÇÒ ¼öµµ ÀÖ´Ù.

<Canvas>
    <TextBox Text="{Binding TestValue, UpdateSourceTrigger=PropertyChanged}"
         Width="70" Height="23" Margin="5"
         HorizontalAlignment="Left" VerticalAlignment="Top"/>
    <TextBlock Text="{Binding TestValue, Converter={StaticResource HexConv}, ConverterParameter = 6}"
           Grid.Row="1" Width="146" Height="23" Margin="5"
           HorizontalAlignment="Left" VerticalAlignment="Top" Canvas.Left="0" Canvas.Top="44" />
</Canvas>

Text="{Binding TestValue, Converter={StaticResource HexConv}, ConverterParameter = 6}"

ConverterParameter °ªÀ» 6À¸·Î ÁöÁ¤ÇÑ´Ù.

public object Convert(object value, Type type, object parameter, System.Globalization.CultureInfo culture)
{
    int v = (int)value;
    int p = int.Parse((string)parameter);
    return string.Format("0x{0:X" + p.ToString() + "}", v);
}

XAMLÀÇ ConverterParameter¿¡  ÁöÁ¤ÇÑ°ªÀº ¼¼ ¹ø° ÀÎÀÚÀÎ parameter·Î Àü´ÞµÈ´Ù.

parameter´Â ¹®ÀÚ¿­ Çü½ÄÀ̹ǷΠint·Î ÆĽÌÇÑ´Ù.
¸Å°³ º¯¼ö°¡ 6À̱⠶§¹®¿¡ 16Áø¼ö¸¦ 6ÀÚ¸®·Î Ç¥½ÃÇÑ´Ù.

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

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