Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "개발자가 알아야할 Binding 강남 DataBinding 스타일 Windows 8 앱개발자라면 꼭 알아야할."— Presentation transcript:

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

2 Non-DataBinding vs. DataBinding TitleText.Text = item.Title; SubTitleText.Text = item.SubTitle; this.DataContext = item;

3 버튼 누가 지웠어 !

4 Non-DataBinding vs. DataBinding TitleText.Text = item.Title; SubTitleText.Text = item.SubTitle; 컴파일 에러 발생 !!! this.DataContext = item; 컴파일 에러 없음  UI 와 코드의 분리  개발자와 디자이너 업무영역의 분리  PEACE!

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

6 문맥

7 너랑 나 ! 강남스타일 !

8 문맥 = Context

9 DataContext

10 FrameworkElement.DataContext 거의 모든 UI 는 FrameworkElement

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

12 자식에게 상속하는 DataContext Visual Tree <Grid x:Name=“LayoutRoot” DataContext=“{Binding TopAlbum}”> Grid(LayoutRoot) TextBlock Grid Image TextBlock Image

13 자식에게 상속하는 DataContext Visual Tree <Grid x:Name=“LayoutRoot” DataContext=“{Binding TopAlbum}”> Grid(LayoutRoot) TextBlock Grid Image TextBlock Image

14 DataContext 주입법 var chart = GetKPopChart(); this.DataContext = chart; ….. In C# In XAML …..

15 Binding

16 문법 Binding –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\}}”

17 {Binding } DataContext 자기 자신 !

18 ItemsControl

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

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

21 ItemTemplate 과 DataContext new Artist() { Name = “ 싸이 ”, CoverArt=“…”, } ItemsSource 의 인스턴스 하나가 ListViewItem 하나의 DataContext 가 된다. 싸이

22 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(…) 에서

23 INotifyPropertyChanged INotifyCollectionChanged

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

25 이미 구현되어 있는 것 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 (ref T storage, T value, [CallerMemberName] String propertyName = null) { if (object.Equals(storage, value)) return false; storage = value; this.OnPropertyChanged(propertyName); return true; } DataModel/SampleDataSource.cs 에서 프로퍼티 예 : Title In the Hood

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

27 Converter

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

29 샘플 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(); }

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

31 Blend 도와줘 !

32 Sample Project Code Review

33 GridApp 샘플 프로젝트에서 protected override void LoadState(Object navigationParameter, Dictionary 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 에서

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


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

Similar presentations


Ads by Google