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

2019년 1월 26일 토요일

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

WPF 데이터바인딩, 멀티바인딩(MultiBinding) 개요 및 실습
여러 속성을 단일 컨트롤에 바인딩하는 것을 멀티바인딩(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 { get; set; }
public string Job { get; set; }
}
}
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;
}
}
}

(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...