강남 DataBinding 스타일 Windows 8 앱개발자라면 꼭 알아야할 개발자가 알아야할 Binding.

Slides:



Advertisements
Similar presentations
For Android 이재원.  페이스북 SDK 설치  2 가지 예제 & 소스  API 사용 예제 프로젝트 만들기  Graph API  참고사항 & 사이트.
Advertisements

삼성소프트웨어멤버십 20 th 박희근 ( A n d r o i d.
( 주 ) 휴즈플로우. DesignDevelopment.
2 주 실습강의 학기, 소프트웨어 설계 및 실험 ( Ⅰ ). Artificial Intelligence Laboratory Preview  웹 2.0  RIA  웹과 실버라이트의 실행 구조  Silverlight with VS 2008  설치 프로그램.
프로젝트 보고서 학과 : 임학과 학번 : 성명 : 조성환 Windows 프로그래밍.
Vision System Lab, Sang-Hun Han
03장 영상처리를 위한 Visual C++ 디지털 영상 파일 포맷 MFC 응용 프로그램 마법사를 이용한 MFC 프로젝트 작성
MEAN Stack Front to Back (MEANAuthApp)
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
2011년 봄학기 정보컴퓨터공학부 컴퓨터 소프트웨어 설계 및 실험
2장 닷넷 프레임워크.
7장 배열 ②.
Lab 3 Guide: 교재 4장 대화상자 예제. - 프로파일 입력 ( 쪽)
MelOn WP8 Developer Guide
모바일 서버 만들기 13장 Do it! Node.js 프로그래밍 이지스퍼블리싱 제공 강의 교안 2017/03
9 표준 액션.
7. JavaBeans 프로그래밍 JavaBeans JavaBeans 만들기 Bean을 이용한 회원가입 양식 작성하기
1 PROJECT TITLE 기획 PAGE NO. 웹 페이지 구성 화 면 번호 화 면 설 명 연 결 화 면 L1 L4 L7
16강. 자바 빈 빈 이란? 빈 만들기 빈 관련 액션 태그(useBean, getProperty, setProperty)
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Internet Computing KUT Youn-Hee Han
명품 JAVA Programming 제 4 장 클래스와 객체.
C++ Espresso 제9장 다형성.
10장 객체-지향 프로그래밍 II ©창병모.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
3주 실습강의 학기, 소프트웨어 설계 및 실험(Ⅰ).
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
01. 직렬화와 역직렬화에 대하여 객체의 직렬화 직렬화와 역직렬화
설계및프로젝트기본I 2017년 1학기(02분반).
이벤트(Event) 처리하기 윈도우 프로그램에서는 이벤트를 통하여 실행 중인 프로그램에게 사용자의 요구사항을 알린다.
윤 홍 란 4 장 클래스 작성 윤 홍 란
Chapter 05. 클래스 완성. chapter 05. 클래스 완성 01. 복사 생성자 복사 생성(Copy Construction) 생성될 때 자신과 같은 타입의 객체를 변수로 받아, 이 객체와 같은 값을 갖는 새로운 객체를 생성하는 것 명시적인 생성 과정뿐만.
DataScience Lab. 박사과정 김희찬 (월)
ASP.NET Mobile Controls
C ++ 프로그래밍 시작.
JSP와 자바 빈즈 JSP 빈즈 구조를 이해하고 활용한다. useBean 액션 활용법을 익힌다.
Todo list Universal & UWP app
스택(Stack) 김진수
Html(front end) & jsp(back end)
비주얼 프로그래밍(2분반) 강의노트 2분반 = 월/목.
CODE SHOP 데이터 바인딩 Data Binding 김대열.
자바의 신 Volume 1 1부(1~3장) 자바의 신 메인 홈 : 자바의 신 페이스북: 자바의 신 문제 풀이 :
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
' Strategic Alliance Partner with '
가상함수와 추상 클래스.
C# 09장. 상속성.
인터넷응용프로그래밍 JavaScript(array).
[CPA340] Algorithms and Practice Youn-Hee Han
SpringFramework 중간고사 요약 REST by SpringFramework.
컴퓨터공학실습(I) 3주 인공지능연구실.
Spring DI 이해 및 활용.
Lab 9 Guide: 인터넷 프로그래밍 예제 * 일대일 채팅 프로그램 (교재 27장, 쪽)
제 1 장. 자료구조와 알고리즘.
C 프로그래밍 기초.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
Signature, Strong Typing
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
세션 (Session) Yang-Sae Moon Department of Computer Science
3장,4장 발표 서정우.
자바 5.0 프로그래밍.
Signature, Strong Typing
김희정 Bridge Pattern.
5주 실습강의 학기, 소프트웨어 설계 및 실험(Ⅰ).
박 현 미 울산여자상업고등학교 창업포스터 만들며 포토샵과 친해지기 박 현 미 울산여자상업고등학교.
SMARTsuite7 TO 년 2월.
MFC 응용 프로그램 구조 두 개의 윈도우로 구성된 일반적인 MFC 프로그램 프레임 윈도우
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2.
발 표 자 : 7조 손 창 국 윤 오 성, 박 진 완 객체 지향 프로그래밍 C++
제 4장 Visual C++ COM 컴파일러.
Presentation transcript:

강남 DataBinding 스타일 Windows 8 앱개발자라면 꼭 알아야할 개발자가 알아야할 Binding

Non-DataBinding vs. DataBinding <Grid> <TextBlock x:Name=“TitleText”/> <TextBlock x:Name=“SubTitleText”/> </Grid> TitleText.Text = item.Title; SubTitleText.Text = item.SubTitle; <Grid> <TextBlock Text=“{Binding Title}”/> <TextBlock Text=“{Binding SubTitle}”/> </Grid> this.DataContext = item;

버튼 누가 지웠어!

Non-DataBinding vs. DataBinding <Grid> <HyperlinkButton /> </Grid> TitleText.Text = item.Title; SubTitleText.Text = item.SubTitle; 컴파일 에러 발생!!! <Grid> <HyperlinkButton Content=“{Binding Title}”/> </Grid> this.DataContext = item; 컴파일 에러 없음 UI와 코드의 분리 개발자와 디자이너 업무영역의 분리 PEACE!

이번 앨범 타이틀 곡이 뭐야?

문맥

강남스타일! 문맥 너랑 나!

문맥 = Context

DataContext

FrameworkElement.DataContext 거의 모든 UI는 FrameworkElement

가정 class Chart class Album class Artist + Album FirstAlbum + List<Album> Albums class Album + string CoverArt + string Name + Artist Artist class Artist + string ProfilerImage + string Name

자식에게 상속하는 DataContext Visual Tree <Grid x:Name=“LayoutRoot” DataContext=“{Binding TopAlbum}”> <Image Source=“{Binding CoverArt}”/> <TextBlock Text=“{Binding Title}”/> <StackPanel DataContext=“{Binding Artist}”> <Image Source=“{Binding ProfileImage}”/> <TextBlock Text=“{Binding Name}”/> </StackPanel> </Grid> Grid(LayoutRoot) Image TextBlock Grid Image TextBlock

자식에게 상속하는 DataContext Visual Tree <Grid x:Name=“LayoutRoot” DataContext=“{Binding TopAlbum}”> <Image Source=“{Binding CoverArt}”/> <TextBlock Text=“{Binding Title}”/> <StackPanel> <Image Source=“{Binding Artist.ProfileImage}”/> <TextBlock Text=“{Binding Artist.Name}”/> </StackPanel> </Grid> Grid(LayoutRoot) Image TextBlock Grid Image TextBlock

DataContext 주입법 var chart = GetKPopChart(); this.DataContext = chart; <Page> <Page.Resources> <models:KPopChart x:Key=“Chart” /> </Page.Resources> <Grid DataContext=“{StaticResource Chart}”> ….. </Grid> </Page> In C# <Page> <Page.DataContext> <models:KPopChart x:Key=“Chart” /> </Page.DataContext> <Grid > ….. </Grid> </Page> In XAML

Binding

문법 Binding Path (생략가능) Source Converter ConverterParameter Text="{Binding Title}" Path (생략가능) Text=“{Binding Path=Title}” Source Text=“{Binding Name, Source={StaticResource MyViewModel}}” Converter Text=“{Binding PublishDate, Converter={StaticResource FamiliarDateString}}” ConverterParameter Text=“{Binding Price, Converter={StaticResource CurrencyConverter}, ConverterParameter=\{0:C2\}}”

{Binding } DataContext 자기 자신! <TextBlock Text=“{Binding }” />

ItemsControl

ItemsControl 가족 ListView GridView FlipView ListBox ComboBox Control .ItemsSource 프로퍼티가 여기 정의 Selector ListViewBase FlipView ListBox ComboBox ListView GridView

ItemsControl에서 DataContext 분배 var artists = new List<Artist>() { new Artist() { Name = “싸이”, CoverArt=“…”}, new Artist() { Name = “아이유”, CoverArt=“…”}, } this.Artists = artist; …. <ListView ItemsSource=“{Binding Artists}” /> CS에서 싸이 아이유 싸이 아이유 XAML에서

ItemTemplate과 DataContext new Artist() { Name = “싸이”, CoverArt=“…”, } ItemsSource의 인스턴스 하나가 ListViewItem 하나의 DataContext가 된다. 싸이 <ListView.ItemTemplate> <DataTemplate> <Grid> <StackPanel> <Image Source=“{Binding CoverArt}” /> <TextBlock Text=“{Binding Name}” /> </StackPanel> </Grid> </DataTemplate> </ListView.ItemTemplate>

In the hood protected override void PrepareContainerForItemOverride(DependencyObject element, object item) { var contentControl = element as ContentControl; contentControl.ContentTemplate = this.ItemTemplate; contentControl.DataContext = item; } ItemsControl의 virtual PrepareContainerForItemOverride(…) 에서

INotifyPropertyChanged INotifyCollectionChanged

약속 컨트롤은 INotifyPropertyChanged.PropertyChanged를 구독합니다. 컨트롤은 INotifyCollectionChanged.CollectionChanged를 구독합니다. public abstract class BindableBase : INotifyPropertyChanged public class ObservableCollection<T> : Collection<T>, INotifyCollectionChanged Common/BindableBase.cs 에서 System.Collections.ObjectModel

이미 구현되어 있는 것 DataModel/SampleDataSource.cs에서 public abstract class SampleDataCommon : App4.Common.BindableBase private string _title = string.Empty; public string Title { get { return this._title; } set { this.SetProperty(ref this._title, value); } } protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] String propertyName = null) if (object.Equals(storage, value)) return false; storage = value; this.OnPropertyChanged(propertyName); return true; 프로퍼티 예 : Title In the Hood

List<Artist> vs. ObservableCollection<Artist> this.Artist.Add(new Artist()); this.Artist.Add(new Artist()); 싸이 싸이 아이유 아이유 싸이 싸이 아이유

Converter

어떤 필요, 어떤 니즈? public List<string> Artists { get; set; } … Artists = new List<string>() { “싸이”, “아이유”, }; 너랑 나랑 강남스타일 싸이, 아이유

샘플 ArtistConverter namespace MyApp { public class ArtistConverter : IValueConverter public object Convert(object value, Type targetType, object parameter, string language) // null 체크, value가 Ienumerable 타입이 아닐 때 예외처리 (생략) var list = value as IEnumerable; StringBuilder sb = new StringBuilder(); foreach (var item in list) if (sb.Length > 0) sb.Append(“, “); sb.Append((string)item); } return sb.ToString();

사용법 인스턴스 생성 (어딘가에) -> 바인딩 식에서 잘 사용 In MyView.xaml (or App.xaml) <Page> <Page.Resources> <conv:ArtistConverter x:Key=“ArtistConverter”/> </Page.Resources> <Grid x:Name=“LayoutRoot”> … <TextBlock Text=“{Binding Artists, Converter={StaticResource ArtistConverter}”/> </Grid> </Page> 너랑 나랑 강남스타일 싸이, 아이유

Blend 도와줘!

Sample Project Code Review

GridApp 샘플 프로젝트에서 protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState) { // TODO: Create an appropriate data model for your problem domain to replace the sample data var sampleDataGroups = SampleDataSource.GetGroups((String)navigationParameter); this.DefaultViewModel["Groups"] = sampleDataGroups; } <common:LayoutAwarePage x:Name="pageRoot" x:Class="App4.GroupedItemsPage" DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}“ … <CollectionViewSource x:Name="groupedItemsViewSource" Source="{Binding Groups}" GroupedItemsPage.xaml.cs에서 GroupedItemsPage.xaml에서

FIN 즐거운 해커쏜(θ) 되세요!