레이블이 WPFDataBinding인 게시물을 표시합니다. 모든 게시물 표시
레이블이 WPFDataBinding인 게시물을 표시합니다. 모든 게시물 표시

2021년 11월 21일 일요일

WPF DataBinding, IValueConverter를 이용한 데이터바인딩, WPf동영상, WPF교육, WPF학원

 

WPF DataBinding, IValueConverter를 이용한 데이터바인딩, WPf동영상, WPF교육, WPF학원

http://ojc.asia/bbs/board.php?bo_table=WPF&wr_id=181 


WPF DataBinding, IValueConverter를 이용한 데이터바인딩

WPF DataBinding, IValueConverter를 이용한 데이터바인딩데이터바인딩시 소스와 타겟의 데이터 타입이 다른 경우가 있다. 예를 들면 체크박스의 체크여부에 따라 “예”, “아니오” 등을 표시하는 경

ojc.asia


https://www.youtube.com/watch?v=YaiFRTypMhM&list=PLxU-iZCqT52Cmj47aKB1T-SxI33YL7rYS&index=19&t=1s 

https://www.youtube.com/watch?v=GAw8eSawrvE&list=PLxU-iZCqT52Cmj47aKB1T-SxI33YL7rYS&index=20&t=11s 

  • 데이터바인딩시 소스와 타겟의 데이터 타입이 다른 경우가 있다. 예를 들면 체크박스의 체크여부에 따라 “예”, “아니오” 등을 표시하는 경우 또는 파일 크기가 바이트이지만 파일의 크기에 따라 바이트, 킬로바이트, 메가 바이트 또는 기가 바이트로 표시하려고 하는 경우가 그렇다.
  • 데이터바인딩시 타입의 변경을 위해 IValueConverter가 존재하며 IValueConverter 인터페이스를 구현하는 클래스가 소스와 대상 사이의 값을 변환한다.
  • WPF 값 변환기는 IValueConverter 인터페이스 또는 IMultiValueConverter 인터페이스 를 구현해야 하며 두 인터페이스 모두 Convert() 및 ConvertBack()의 ​​두 가지 메서드 만 구현하면 된다.
  • 문자열을 입력으로 불리언(Boolean) 값을 반환하는 간단한 변환기를 구현해 보자.
  • [실행화면]


  • [YesNoToBoolConverter.cs]


using System;

using System.Windows.Data;

namespace WpfApp12

{

    class YesNoToBoolConverter : IValueConverter

    {

        // 소스값이 타겟에 바인딩 되는 경우 호출

        // TextBox >> TextBlock, TextBox >> CheckBox

        // TextBox의 Text속성의 값 "YES", "NO"에 따리 true, false를 리턴

        public object Convert(object value, Type targetType, object param, System.Globalization.CultureInfo culture)

        {

            switch (value.ToString().ToUpper())

            {


                case "YES"return true;

                case "NO"return false;

            }

            return false;

        }


        // 타겟값이 역으로 소스에 바인딩 될때 호출

        // CheckBox --> TextBox

        // CheckBox의 값 true, false에 따라 "YES", "NO" 문자열을 리턴

        public object ConvertBack(object value, Type targetType, object param, System.Globalization.CultureInfo culture)

        {

            if (value is bool)

            {

                if ((bool)value == truereturn "YES";

                else return "NO";

            }

            return "NO";

        }

    }


}


  • [MainWindow.xaml]


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

        mc:Ignorable="d"

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

    <Window.Resources>

        <local:YesNoToBoolConverter x:Key="converter"/>

    </Window.Resources>

    <StackPanel>

        <TextBox Name="txtValue" Text="YES"/>

        <WrapPanel>

            <TextBlock Text="Current Value : "/>

            <TextBlock Text="{Binding ElementName=txtValue, Path=Text, Converter={StaticResource converter}}"/>

        </WrapPanel>

        <CheckBox Content="Yes" IsChecked="{Binding ElementName=txtValue, Path=Text, Converter={StaticResource converter}}" />

    </StackPanel>

</Window>


#WPFDataBinding, #DataBinding, #IValueConverter, #데이터바인딩, #WPF교육, #WPF강좌, #WPF강의 

WPFDataBinding, DataBinding, IValueConverter, 데이터바인딩, WPF교육, WPF강좌, WPF강의 

멀티바인딩, 멀티데이터바인딩, WPF데이터바인딩, WPF교육, WPF강좌, WPF학원, DataBinding, WPFDataBinding

WPF 데이터바인딩, 멀티바인딩(MultiBinding) 개요 및 실습, WPF학원, WPF교육

http://ojc.asia/bbs/board.php?bo_table=WPF&wr_id=179 


WPF 데이터바인딩, 멀티바인딩(MultiBinding) 개요 및 실습

WPF 데이터바인딩, 멀티바인딩(MultiBinding) 개요 및 실습여러 속성을 단일 컨트롤에 바인딩하는 것을 멀티바인딩(MultiBinding) 이라고 한다.MultiBinding에는 항상 MultiValueConverter를 동반하는데 그 안에

ojc.asia


https://www.youtube.com/watch?v=A0atwgTrcjY&list=PLxU-iZCqT52Cmj47aKB1T-SxI33YL7rYS&index=11&t=1s 


https://www.youtube.com/watch?v=8EA-LXKJpkI&list=PLxU-iZCqT52Cmj47aKB1T-SxI33YL7rYS&index=12 

  • 여러 속성을 단일 컨트롤에 바인딩하는 것을 멀티바인딩(MultiBinding) 이라고 한다.
  • MultiBinding에는 항상 MultiValueConverter를 동반하는데 그 안에 컨트롤에 전달할 값을 결정하는 로직을 정의하면 된다.
  • 사원들의 목록을 리스트박스, TextBlock, TextBox에 멀티바인딩 하고 TextBox에서 수정을 하면 사원 데이터가 수정되어 리스트박스 및 TextBlock에 역바인딩 되는 것을 확인하는 예제를 작성하자.
  • 실행화면 

최초 실행시 EmpConverter의 Convert() 메소드가 호출되어 Emp 컬렉션의 데이터가 ”:”를 기준으로 결합되어 리스트박스 및 TextBlock, TextBox에 로딩된다. SMITH  사원의 직무는 Salesman 인데 이를 선택 후 맨 하단의 TextBox에서 “이종철 : Manager”로 수정을 하면 TextBox가 포커스를 잃을 때 EmpConverter의 ConvertBack() 메소드가 호출되어 Emp 컬렉션이 수정되고 이것이 다시 리스트박스 및 TextBlock 2군데에 재 바인딩 되는 것을 확인하자.

 

 

 

  • 프로젝트명 : MultiBinding
  • MainWindow.xaml

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

        mc:Ignorable="d"

        Title="사원 리스트" SizeToContent="WidthAndHeight">

    <Window.Resources>

        <local:Emps x:Key="Emps"/>

        <local:EmpConverter x:Key="EmpConverter"/>

        <DataTemplate x:Key="EmpListTemplate">

            <TextBlock>

                <TextBlock.Text>

                    <MultiBinding Converter="{StaticResource EmpConverter}"

                                  Mode="TwoWay">

                        <Binding Path="Ename"/>

                        <Binding Path="Job"/>

                    </MultiBinding> 

                </TextBlock.Text>

            </TextBlock>

        </DataTemplate>

        <Style x:Key="mystyle" TargetType="{x:Type Control}">

            <Setter Property="Width" Value="120"/>

            <Setter Property="Background" Value="Yellow"/>

            <Setter Property="HorizontalAlignment" Value="Center"/>

        </Style>

    </Window.Resources>

    <StackPanel>

        <TextBlock HorizontalAlignment="Center"> 사원 리스트</TextBlock>

        <ListBox Width="100" Style="{StaticResource mystyle}"

                     ItemsSource="{Binding Source={StaticResource Emps}}"

                     ItemTemplate="{StaticResource EmpListTemplate}"

                     IsSynchronizedWithCurrentItem="True"/>

        <TextBlock HorizontalAlignment="Center" Margin="10"> 선택한 사원</TextBlock>

        <TextBlock Name="textBlock1" DataContext="{StaticResource Emps}" HorizontalAlignment="Center">

            <TextBlock.Text>

                <MultiBinding Converter="{StaticResource EmpConverter}"

 ConverterParameter="reverse">

                    <Binding Path="Ename"/>

                    <Binding Path="Job"/>

                </MultiBinding>

            </TextBlock.Text>

        </TextBlock>

        <TextBlock Name="textBlock2" DataContext="{StaticResource Emps}" HorizontalAlignment="Center">

            <TextBlock.Text>

                <MultiBinding  Converter="{StaticResource EmpConverter}">

                    <Binding Path="Ename"/>

                    <Binding Path="Job"/>

                </MultiBinding>

            </TextBlock.Text>

        </TextBlock>

        <TextBox Name="textBox1" DataContext="{StaticResource Emps}" Style="{StaticResource mystyle}">

            <TextBox.Text>

                <MultiBinding  Converter="{StaticResource EmpConverter}">

                    <Binding Path="Ename"/>

                    <Binding Path="Job"/>

                </MultiBinding>

            </TextBox.Text>

        </TextBox>

    </StackPanel>

</Window>

 

  • Emp.cs

using System.Collections.ObjectModel;


namespace MultiBinding

{

    class Emps : ObservableCollection<Emp>

    {

        internal Emps()

        {

            Add(new Emp() { Ename = "SMITH", Job = "Salesman" });

            Add(new Emp() { Ename = "KING", Job = "Manager" });

            Add(new Emp() { Ename = "FORD", Job = "CLERK" });

            Add(new Emp() { Ename = "JOHN", Job = "CLERK" });

        }

    }

    class Emp

    {

        public string Ename { getset; }

        public string Job { getset; }

    }

}

 

  • EmpConverter.cs

using System;

using System.Globalization;

using System.Windows.Data;


namespace MultiBinding

{

    class EmpConverter : IMultiValueConverter

    {

        public object Convert(object[] val, Type targetType, object param, CultureInfo culture)

        {

            string EmpData;


            switch((string)param)

            {

                case "reverse": EmpData = val[1] + " : " + val[0]; break;

                default: EmpData = val[0] + " : " + val[1]; break;

            }

            return EmpData;

        }


        public object[] ConvertBack(object val, Type[] targetTypes, object param, CultureInfo culture)

        {

            var splitValues = ((string)val).Split(':');

            return splitValues;

        }

    }

}

#멀티바인딩, #멀티데이터바인딩, #WPF데이터바인딩#WPF교육#WPF강좌#WPF학원#DataBinding#WPFDataBinding

멀티바인딩, 멀티데이터바인딩, WPF데이터바인딩, WPF교육, WPF강좌, WPF학원, DataBinding, WPFDataBinding

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...