SlideShare a Scribd company logo
1 of 45
Download to read offline
송기수/ OpenSG
틱틱대도 써야 하는 Windows 10 앱 개발
C# Tips & Tricks.
오픈에스지
• OpenSG
• 기술이사
• 본 사 : 충남 아산
• 연구소 : 서울 강남
• Solution, Consulting, SI and Education Service based on Microsoft .NET
Technology
• 제조 자동화 설비, 실시간 모니터링, UX
14:30:38
Its all about UWP
(UWP : Universal Windows Platform)
1. XAML
2. Tool
3. Databinding
Agenda
14:30:38
XAML
• 새로운 컨트롤
• RelativePanel
• SplitView
• Adaptive UI
• 예)계산기, 설정창
• View States
• Adaptive triggers
• XAML 성능
• phase rendering
• deferred loading
14:30:38
상대적인 설정 값에 의해 자식 컨트롤을 배치
Relative Panel
레이아웃 컨트롤(Panel)
Grid
Stack
Panel
Canvas
Scroll
Viewer
Border View Box Wrap Grid Relative
Panel
14:30:38
<RelativePanel>
<Rectangle x:Name="BlueRect"
Height="100" Width="200" Fill="Blue" />
<Rectangle x:Name="RedRect"
Height="100" Width="100" Fill="Red"
RelativePanel.Below="BlueRect"
RelativePanel.AlignHorizontalCenterWith="BlueRect" />
</RelativePanel>
Relative Panel
• 타 Element를 기준으로 상대적 위치, 정렬 설정
• AttachedProperty로 설정됨
14:30:38
RelativePanel
• 적응형 UI 구현 최적
• 보통 Visual State와 동시 사용됨
<RelativePanel>
<Rectangle x:Name="BlueRect" Fill="Blue" />
<Rectangle x:Name="RedRect" RelativePanel.Below="BlueRect" />
</RelativePanel>
정렬
AlignBottomWith
AlignHorizontalCenterWith
AlignLeftWith
AlignRightWith
AlignTopWith
AlignVerticalCenterWith
(패널로부터의)정렬
AlignBottomWithPanel
AlignHorizontalCenterWithPanel
AlignLeftWithPanel
AlignRightWithPanel
AlignTopWithPanel
AlignVerticalCenterWithPanel
위치
Above
Below
LeftOf
RightOf
14:30:38
예)
14:30:38
Demo
• RelativePanel
4:45
14:30:38
SplitView
14:30:38
SplitView
• IsPaneOpen : True/False
• DisplayMode : Inline/Overlay/CompactInline/CompactOverlay
IsPaneOpen="True" IsPaneOpen="False"
DisplayMode=
"Inline"
DisplayMode=
"Overlay"
DisplayMode=
"CompactInline"
DisplayMode=
"CompactOverlay"
14:30:39
Demo
• SplitView
4:50
14:30:39
Adaptive UI
14:30:39
Adaptive UI
• Visual States
• XAML 정의
• 블랜드를 통해서 정의 가능
• 복잡하게 정의된 효과를 단순하게 선언하여 사용
• 에니메이션, 객체상태…
14:30:39
VisualState 상태 전환 방법
• VisualStateManager.Goto(element, state, transition)
private void Page_SizeChanged(object sender, SizeChangedEventArgs
e)
{
var state = string.Empty;
if (e.NewSize.Width > 361)
state = "MinWidth360";
else
state = "MinWidth000";
VisualStateManager.GoToState(this, state, true);
}
14:30:39
Demo
• VisuaState
14:30:39
Adaptive triggers
• 코드없이 XAML에서 설정만으로 상태전환 가능
• 제공되는 기본 트리거
• MinWindowHeight (Taller than this)
• MinWindowWidth (Wider than this)
<VisualState x:Name="VisualState500min">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="501" />
</VisualState.StateTriggers>
</VisualState>
14:30:39
Demo
• Adaptive triggers
5:00
14:30:39
XAML 성능
• phase rendering
• deferred loading
14:30:39
X:Phase rendering
• 기본값 0
• 작은 값->큰값 순서로 랜더링 수행
• 값이 연속적일 필요는 없음
<DataTemplate x:DataType="model:Monster">
<Grid Width="200" Height="80">
<TextBlock Text="{x:Bind Name}" />
<TextBlock Text="{x:Bind StarSign}" x:Phase="1"/>
</Grid>
</DataTemplate>
14:30:39
deferred loading
• 초기 로드되는 요소 최소화
• 요소가 요구되기 전까지는 loading 되지 않는다
• 요소가 요구되는 상황
1. FindName()
2. GetTemplatedChild() (ControlTemplate 일경우)
3. Storyboard & VisualStates (내부적으로 FindName호출함)
<StackPanel x:Name="AdditionalProductPage" x:DeferLoadStrategy="Lazy">
<!– your lovely XAML goes here-->
</StackPanel>
14:30:39
Demo
• phase rendering
• deferred loading
5:05
14:30:39
2 Tool
• 비주얼 스튜디오 2015 의 새로운 기능
• 진단도구
• 중단점
• 직접실행창 : LINQ
• peek view
• 라이브 시각적 트리
• 라이브 속성 탐색기
14:30:39
Demo
• 진단도구
• 중단점
• 직접실행창 : LINQ
• peek view
• 라이브 시각적 트리
• 라이브 속성 탐색기
5:20
14:30:39
3 Databinding
• XAML Databinding
• 기존 바인딩
• Classic Binding
• {binding}
• 컴파일된 바인딩
• Compiled Binding
• {x:bind}
5:20
14:30:39
예) 정적 데이터 바인딩
바인딩 표현식 {StaticResource ….}
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<TextBlock Text="나이 : " />
<TextBlock Text="성 : " />
<TextBlock Text="이름 : " />
<TextBlock Text="여성 : " />
…
14:30:39
예) 동적 데이터 바인딩
• 바인딩 표현식 {Binding ….}
• DataContext 설정 필요
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<TextBox Text="{Binding PersonInfo.Age}" />
<TextBox Text="{Binding PersonInfo.LastName}" />
<TextBox Text="{Binding PersonInfo.FirstName}" />
<CheckBox IsChecked="{Binding PersonInfo.IsFemale}" />
…
14:30:39
<Page>
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<TextBox Text="{Binding PersonInfo.FirstName}" />
…
Classic Binding
• DataContext : 바인딩 대상
• DataContext의 PersonInfo의 FirstName 속성을 찾음
• DataContext 검색
• 자신의 DataContext 우선 적용
• 자신의 DataContext가 null이면
• Tree 구조상 자신 -> 최상위까지 차례대로 탐색
14:30:39
Classic Binding
• 장점
• DataContext의 형식이 특정되지 않아도 됨
• 사용이 용이
• 다양하고 유연하게 코드적용가능
• 단점
• 런타임시 타입검사필요->성능이슈
• 디버깅의 어려움
ID
FirstName
LastName
Age
Btype Class
Address
Phone Number
Company
FirstName
Atype Class
Address
Phone Number
Company
Ctype Class
<Page>
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<TextBox Text="{Binding FirstName}" />
…
(object)
DataContext
14:30:39
바인딩 표현식 #1
<TextBox Text="{Binding
Converter
ConverterLanguage
ConverterParameter
ElementName
FallbackValue
Mode
Path
RelativeSource
Source
TargetNullValue
UpdateSourceTrigger"}
Converter : 컨버터
ElementName : 요소 바인딩
FallbackValue : 기본값(바인딩이 유효하지 않을 때)
TargetNullValue : 기본값(대상 값이 null일 때)
UpdateSourceTrigger : 소스 반영시점
<TextBox Text="{Binding FirstName}" />
=>
<TextBox Text="{Binding Path=FirstName}" />
14:30:39
Demo
• Classic binding
• FallbackValue
• TargetNullValue
• UpdateSourceTrigger
5:35
14:30:39
컴파일 바인딩
• Compiled binding, {x:Bind}, {Binding ….}
• 기존 바인딩 단점
• 런타임시 부하 발생
• 바인딩식 디버깅 어려움
• 바인딩식 컴파일시에 검증 불가능
• 바인딩 대상의 형(Type) 명시 할 수 있다면
• 기존 바인딩 단점 보완 가능
• 런타임시 부하는 적음
• 변환된 코드는 디버깅 가능
• 바인딩식은 컴파일타임에 즉시 검증됨
• 바인딩 선언은 코드로 자동 변환된 후 컴파일 됨
• 기존의 기능과 편리함을 유지 & 성능 향상
14:30:39
컴파일 바인딩
• 바인딩 대상
• DataContext,
• 해당 페이지의 멤버만 바인딩 가능
14:30:39
컴파일 바인딩
<Page x:Class="Demo_Databinding.View.ClassicBindingPage1">
<Grid Background="{StaticResource>
<TextBox Text="{x:Bind sViewModel.PersonInfo.Age}" />
<TextBox Text="{x:Bind sViewModel.PersonInfo.LastName}" />
<TextBox Text="{x:Bind sViewModel.PersonInfo.FirstName}" />
<CheckBox IsChecked="{x:Bind sViewModel.PersonInfo.IsFemale}" />
…
public sealed partial class CompiledBindingPage : Page
{
public SampleViewModel sViewModel { get; set; }
public CompiledBindingPage()
{
this.InitializeComponent();
sViewModel = new SampleViewModel();
}
}
14:30:39
바인딩 표현식 #2
<TextBox Text="{Binding
Converter
ConverterLanguage
ConverterParameter
ElementName
FallbackValue
Mode
Path
RelativeSource
Source
TargetNullValue
UpdateSourceTrigger"}
<TextBox Text="{x:Bind
Converter
ConverterLanguage
ConverterParameter
ElementName
FallbackValue
Mode
Path
RelativeSource
Source
TargetNullValue
UpdateSourceTrigger"}
14:30:39
Demo
• Compiled binding
5:45
14:30:39
컴파일 바인딩
• Data Templates
<ListView ItemsSource="{x:Bind ViewModel.Employees}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="model:Employee">
<TextBlock Text="{x:Bind Name}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
14:30:40
컴파일 바인딩
• 이벤트 바인딩
<Button Click="btnSelectEmployee_Click">사원 정보 선택</Button>
<Button Click="{x:Bind Select}">사원 정보 선택</Button>
14:30:40
컴파일 바인딩
• 이벤트 바인딩
• 적용 가능한 함수 시그니처
• void Select()
• void Select(object sender, RoutedEventArgs e)
• void Select(object sender, object e)
• 오버로딩은 지원되지 않는다->하나의 메서드만 존재해야 함
• 모든 이벤트에 적용 가능함
• ICommand & EventToCommand 대신 사용 가능함
• 인자 전달, CanExecute와 같은 기능은 포함하지 않음
<Button Click="{x:Bind Select}">사원 정보 선택</Button>
<Button Click="{x:Bind EmplyeeUtil.Select}">사원 정보 선택</Button>
14:30:40
컴파일 바인딩
• 바인딩은 컴파일시에 검증된다
• Strongly-typed 바인딩
• 리플렉션을 사용하지 않는다
• 페이지 자신의 멤버를 바인딩
• DataContext와는 무관함
• 기본 모드는 OneTime
• Classic Binding에서는 OneWay가 기본 모드임
• 기존의 OneWay, TwoWay 모드도 가능함
• 기타 표준 바인딩 원리 준수
• INotifyPropertyChanged
• INotifyCollectionChanged
• IObservableVector
14:30:40
컴파일 바인딩 : 고려할 점
• MVVM에서 적용?
• View와 ViewModel과의 coupling 문제
• View 수준에서 ViewModel을 멤버로 가지고 있어야 함
• JSON객체 혹은 untyped object일 경우 사용불가
• Classic Binding을 사용
• 스타일에서의 사용
• {x:Bind}은 style에서 setters 로는 사용 불가
• {x:Bind}은 style에 정의된 DataTemplate 에서는 사용가능
14:30:40
{Binding} {x:Bind} 동시사용
• {Binding} {x:Bind} 를 동시에 C# 코드 구성사용 하게 구성
• DataContext와 특정멤버(ViewModel)를 같이 설정함
• XAML에서 {Binding}, {x:Bind}중 어느것을 사용하더라고 동작
public sealed partial class CompiledBindingPage : Page
{
public SampleViewModel sViewModel { get; set; }
public CompiledBindingPage()
{
this.InitializeComponent();
this.DataContextChanged += (s, e) =>
{
sViewModel = DataContext as SampleViewModel;
};
}
}
14:30:40
Session Summary
• XAML
• RelativePanel
• SplitView
• Tool
• 진단도구 : CPU, 메모리
• 직접실행창 : LINQ
• 라이브 시각적 트리, 속성 탐색기
• Databinding
• Classic Binding
• Compiled Binding
5:50
14:30:40
감사합니다.
• MSDN Forum http://aka.ms/msdnforum
• TechNet Forum http://aka.ms/technetforum
http://aka.ms/td2015_again
TechDays Korea 2015에서 놓치신 세션은
Microsoft 기술 동영상 커뮤니티 Channel 9에서
추후에 다시 보실 수 있습니다.

More Related Content

What's hot

[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDW[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDWPgDay.Seoul
 
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'sung ki choi
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Jin wook
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Gruter
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaHyeonSeok Choi
 
Data analysis with Tajo
Data analysis with TajoData analysis with Tajo
Data analysis with TajoGruter
 
대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. rest대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. restTerry Cho
 
Realtime Big data Anaytics and Exampes of Daum (2013)
Realtime Big data Anaytics and Exampes of Daum (2013)Realtime Big data Anaytics and Exampes of Daum (2013)
Realtime Big data Anaytics and Exampes of Daum (2013)Channy Yun
 
Memcached의 확장성 개선
Memcached의 확장성 개선Memcached의 확장성 개선
Memcached의 확장성 개선NAVER D2
 
Elastic Stack & Data pipeline
Elastic Stack & Data pipelineElastic Stack & Data pipeline
Elastic Stack & Data pipelineJongho Woo
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준NAVER D2
 
Mongodb 특징 분석
Mongodb 특징 분석Mongodb 특징 분석
Mongodb 특징 분석Daeyong Shin
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912Yooseok Choi
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문SeungHyun Eom
 
Mongo DB 완벽가이드 - 4장 쿼리하기
Mongo DB 완벽가이드 - 4장 쿼리하기Mongo DB 완벽가이드 - 4장 쿼리하기
Mongo DB 완벽가이드 - 4장 쿼리하기JangHyuk You
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoMatthew (정재화)
 
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)Jaikwang Lee
 
[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습smartstudy_official
 
[235]루빅스개발이야기 황지수
[235]루빅스개발이야기 황지수[235]루빅스개발이야기 황지수
[235]루빅스개발이야기 황지수NAVER D2
 

What's hot (20)

[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDW[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDW
 
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
 
Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략Mongo DB 성능최적화 전략
Mongo DB 성능최적화 전략
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, Kibana
 
Elastic stack
Elastic stackElastic stack
Elastic stack
 
Data analysis with Tajo
Data analysis with TajoData analysis with Tajo
Data analysis with Tajo
 
대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. rest대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. rest
 
Realtime Big data Anaytics and Exampes of Daum (2013)
Realtime Big data Anaytics and Exampes of Daum (2013)Realtime Big data Anaytics and Exampes of Daum (2013)
Realtime Big data Anaytics and Exampes of Daum (2013)
 
Memcached의 확장성 개선
Memcached의 확장성 개선Memcached의 확장성 개선
Memcached의 확장성 개선
 
Elastic Stack & Data pipeline
Elastic Stack & Data pipelineElastic Stack & Data pipeline
Elastic Stack & Data pipeline
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준
 
Mongodb 특징 분석
Mongodb 특징 분석Mongodb 특징 분석
Mongodb 특징 분석
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
 
Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문Elastic Search (엘라스틱서치) 입문
Elastic Search (엘라스틱서치) 입문
 
Mongo DB 완벽가이드 - 4장 쿼리하기
Mongo DB 완벽가이드 - 4장 쿼리하기Mongo DB 완벽가이드 - 4장 쿼리하기
Mongo DB 완벽가이드 - 4장 쿼리하기
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with Tajo
 
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
대용량 로그분석 Bigquery로 간단히 사용하기 (20170215 T아카데미)
 
[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습[스마트스터디]MongoDB 의 역습
[스마트스터디]MongoDB 의 역습
 
[235]루빅스개발이야기 황지수
[235]루빅스개발이야기 황지수[235]루빅스개발이야기 황지수
[235]루빅스개발이야기 황지수
 

Viewers also liked

[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)Sang Don Kim
 
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌Seok-joon Yun
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012Esun Kim
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)Sang Don Kim
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11OnGameServer
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011Esun Kim
 
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012Esun Kim
 
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)Sang Don Kim
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 

Viewers also liked (9)

[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
 
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌[C++ Korea] Effective Modern C++ Study item14 16 +신촌
[C++ Korea] Effective Modern C++ Study item14 16 +신촌
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
 
Boost 라이브리와 C++11
Boost 라이브리와 C++11Boost 라이브리와 C++11
Boost 라이브리와 C++11
 
코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011코드 생성을 사용해 개발 속도 높이기 NDC2011
코드 생성을 사용해 개발 속도 높이기 NDC2011
 
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
자동화된 소스 분석, 처리, 검증을 통한 소스의 불필요한 #if - #endif 제거하기 NDC2012
 
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
[Td 2015]디버깅, 어디까지 해봤니 당신이 아마도 몰랐을 디버깅 꿀팁 공개(김희준)
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 

Similar to [Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)

20150912 windows 10 앱 tips tricks
20150912 windows 10 앱 tips  tricks20150912 windows 10 앱 tips  tricks
20150912 windows 10 앱 tips tricks영욱 김
 
2013 JCO tipJS.com JavaScript MVC framework
2013 JCO tipJS.com JavaScript MVC framework2013 JCO tipJS.com JavaScript MVC framework
2013 JCO tipJS.com JavaScript MVC frameworkSeung-Hyun PAEK
 
웹개발자가 알아야할 기술
웹개발자가 알아야할 기술웹개발자가 알아야할 기술
웹개발자가 알아야할 기술jaypi Ko
 
다음 통합검색 로딩 속도 개선 삽질기
다음 통합검색 로딩 속도 개선 삽질기다음 통합검색 로딩 속도 개선 삽질기
다음 통합검색 로딩 속도 개선 삽질기정윤 김
 
Webframeworks angular js 세미나
Webframeworks angular js 세미나Webframeworks angular js 세미나
Webframeworks angular js 세미나WebFrameworks
 
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [백발백준] : 백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [백발백준] : 백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [백발백준] : 백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [백발백준] : 백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇BOAZ Bigdata
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)Hankyo
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)beom kyun choi
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기jongho jeong
 
Hacosa js study 4주차
Hacosa js study 4주차Hacosa js study 4주차
Hacosa js study 4주차Seong Bong Ji
 
5-4. html5 offline and storage
5-4. html5 offline and storage5-4. html5 offline and storage
5-4. html5 offline and storageJinKyoungHeo
 
Ksug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpaKsug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpaYounghan Kim
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기OnGameServer
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridappNAVER D2
 
딥러닝(Deep Learing) using DeepDetect
딥러닝(Deep Learing) using DeepDetect딥러닝(Deep Learing) using DeepDetect
딥러닝(Deep Learing) using DeepDetectJunyi Song
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기Jeado Ko
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 

Similar to [Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수) (20)

20150912 windows 10 앱 tips tricks
20150912 windows 10 앱 tips  tricks20150912 windows 10 앱 tips  tricks
20150912 windows 10 앱 tips tricks
 
2013 JCO tipJS.com JavaScript MVC framework
2013 JCO tipJS.com JavaScript MVC framework2013 JCO tipJS.com JavaScript MVC framework
2013 JCO tipJS.com JavaScript MVC framework
 
웹개발자가 알아야할 기술
웹개발자가 알아야할 기술웹개발자가 알아야할 기술
웹개발자가 알아야할 기술
 
다음 통합검색 로딩 속도 개선 삽질기
다음 통합검색 로딩 속도 개선 삽질기다음 통합검색 로딩 속도 개선 삽질기
다음 통합검색 로딩 속도 개선 삽질기
 
Webframeworks angular js 세미나
Webframeworks angular js 세미나Webframeworks angular js 세미나
Webframeworks angular js 세미나
 
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [백발백준] : 백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [백발백준] : 백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [백발백준] : 백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇
제 19회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [백발백준] : 백준봇 : 컨테이너 오케스트레이션 기반 백준 문제 추천 봇
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)
 
Nexacro
NexacroNexacro
Nexacro
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기
 
Hacosa js study 4주차
Hacosa js study 4주차Hacosa js study 4주차
Hacosa js study 4주차
 
5-4. html5 offline and storage
5-4. html5 offline and storage5-4. html5 offline and storage
5-4. html5 offline and storage
 
Ksug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpaKsug2015 jpa5 스프링과jpa
Ksug2015 jpa5 스프링과jpa
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기
 
C++에서 Objective-C까지
C++에서 Objective-C까지C++에서 Objective-C까지
C++에서 Objective-C까지
 
[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp[D2 오픈세미나]3.web view hybridapp
[D2 오픈세미나]3.web view hybridapp
 
딥러닝(Deep Learing) using DeepDetect
딥러닝(Deep Learing) using DeepDetect딥러닝(Deep Learing) using DeepDetect
딥러닝(Deep Learing) using DeepDetect
 
How to evaluate accessibility with automatic
How to evaluate accessibility with automaticHow to evaluate accessibility with automatic
How to evaluate accessibility with automatic
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 

More from Sang Don Kim

[Td 2015] 국내에서 처음으로 선보이는 microsoft 차세대 서버 운영 체제 windows server 2016
[Td 2015] 국내에서 처음으로 선보이는 microsoft 차세대 서버 운영 체제 windows server 2016[Td 2015] 국내에서 처음으로 선보이는 microsoft 차세대 서버 운영 체제 windows server 2016
[Td 2015] 국내에서 처음으로 선보이는 microsoft 차세대 서버 운영 체제 windows server 2016Sang Don Kim
 
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)Sang Don Kim
 
[TD 2015] Microsoft Azure IaaS v2(최정현)
[TD 2015] Microsoft Azure IaaS v2(최정현)[TD 2015] Microsoft Azure IaaS v2(최정현)
[TD 2015] Microsoft Azure IaaS v2(최정현)Sang Don Kim
 
[TD2015] 이 시대에 소규모 게임 개발팀이 마소와 함께 살아가는 방법(송용성)
[TD2015] 이 시대에 소규모 게임 개발팀이 마소와 함께 살아가는 방법(송용성)[TD2015] 이 시대에 소규모 게임 개발팀이 마소와 함께 살아가는 방법(송용성)
[TD2015] 이 시대에 소규모 게임 개발팀이 마소와 함께 살아가는 방법(송용성)Sang Don Kim
 
[Td 2015]두근두근 asp.net 5(한상훈)
[Td 2015]두근두근 asp.net 5(한상훈)[Td 2015]두근두근 asp.net 5(한상훈)
[Td 2015]두근두근 asp.net 5(한상훈)Sang Don Kim
 
[Td 2015]windows 10 엔터프라이즈 시나리오 part II 보안 및 관리(권순만)
[Td 2015]windows 10 엔터프라이즈 시나리오 part II   보안 및 관리(권순만)[Td 2015]windows 10 엔터프라이즈 시나리오 part II   보안 및 관리(권순만)
[Td 2015]windows 10 엔터프라이즈 시나리오 part II 보안 및 관리(권순만)Sang Don Kim
 
[Td 2015]windows 10 엔터프라이즈 시나리오 part I 배포 및 이미징(박성기)
[Td 2015]windows 10 엔터프라이즈 시나리오 part I   배포 및 이미징(박성기)[Td 2015]windows 10 엔터프라이즈 시나리오 part I   배포 및 이미징(박성기)
[Td 2015]windows 10 엔터프라이즈 시나리오 part I 배포 및 이미징(박성기)Sang Don Kim
 
[Td 2015]함께하면 더 좋은 windows 10과 인텔 스카이레이크, 아키텍쳐와 인텔 그래픽스 최적화 살펴보기(하태동)
[Td 2015]함께하면 더 좋은 windows 10과 인텔 스카이레이크, 아키텍쳐와 인텔 그래픽스 최적화 살펴보기(하태동)[Td 2015]함께하면 더 좋은 windows 10과 인텔 스카이레이크, 아키텍쳐와 인텔 그래픽스 최적화 살펴보기(하태동)
[Td 2015]함께하면 더 좋은 windows 10과 인텔 스카이레이크, 아키텍쳐와 인텔 그래픽스 최적화 살펴보기(하태동)Sang Don Kim
 
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)Sang Don Kim
 
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)Sang Don Kim
 
[Td 2015]조막만한 화면에서 대박만한 화면까지. 고생 끝 적응(adaptive ui) 시작(권영철)
[Td 2015]조막만한 화면에서 대박만한 화면까지. 고생 끝 적응(adaptive ui) 시작(권영철)[Td 2015]조막만한 화면에서 대박만한 화면까지. 고생 끝 적응(adaptive ui) 시작(권영철)
[Td 2015]조막만한 화면에서 대박만한 화면까지. 고생 끝 적응(adaptive ui) 시작(권영철)Sang Don Kim
 
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)Sang Don Kim
 
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)Sang Don Kim
 
[Td 2015]맨땅에 헤딩하고 터득한 스토어 공략법(돈벌기)(육주용)
[Td 2015]맨땅에 헤딩하고 터득한 스토어 공략법(돈벌기)(육주용)[Td 2015]맨땅에 헤딩하고 터득한 스토어 공략법(돈벌기)(육주용)
[Td 2015]맨땅에 헤딩하고 터득한 스토어 공략법(돈벌기)(육주용)Sang Don Kim
 
[Td 2015]라즈베리파이에 windows 10 io t core 맛있게 발라 먹기(유정현)
[Td 2015]라즈베리파이에 windows 10 io t core 맛있게 발라 먹기(유정현)[Td 2015]라즈베리파이에 windows 10 io t core 맛있게 발라 먹기(유정현)
[Td 2015]라즈베리파이에 windows 10 io t core 맛있게 발라 먹기(유정현)Sang Don Kim
 
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)Sang Don Kim
 
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)Sang Don Kim
 
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)Sang Don Kim
 
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)Sang Don Kim
 
[Td 2015]python을 azure에서 사용하는법(배권한)
[Td 2015]python을 azure에서 사용하는법(배권한)[Td 2015]python을 azure에서 사용하는법(배권한)
[Td 2015]python을 azure에서 사용하는법(배권한)Sang Don Kim
 

More from Sang Don Kim (20)

[Td 2015] 국내에서 처음으로 선보이는 microsoft 차세대 서버 운영 체제 windows server 2016
[Td 2015] 국내에서 처음으로 선보이는 microsoft 차세대 서버 운영 체제 windows server 2016[Td 2015] 국내에서 처음으로 선보이는 microsoft 차세대 서버 운영 체제 windows server 2016
[Td 2015] 국내에서 처음으로 선보이는 microsoft 차세대 서버 운영 체제 windows server 2016
 
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
[TD 2015] windows server에서 만나보는 docker와 windows container(최한홍)
 
[TD 2015] Microsoft Azure IaaS v2(최정현)
[TD 2015] Microsoft Azure IaaS v2(최정현)[TD 2015] Microsoft Azure IaaS v2(최정현)
[TD 2015] Microsoft Azure IaaS v2(최정현)
 
[TD2015] 이 시대에 소규모 게임 개발팀이 마소와 함께 살아가는 방법(송용성)
[TD2015] 이 시대에 소규모 게임 개발팀이 마소와 함께 살아가는 방법(송용성)[TD2015] 이 시대에 소규모 게임 개발팀이 마소와 함께 살아가는 방법(송용성)
[TD2015] 이 시대에 소규모 게임 개발팀이 마소와 함께 살아가는 방법(송용성)
 
[Td 2015]두근두근 asp.net 5(한상훈)
[Td 2015]두근두근 asp.net 5(한상훈)[Td 2015]두근두근 asp.net 5(한상훈)
[Td 2015]두근두근 asp.net 5(한상훈)
 
[Td 2015]windows 10 엔터프라이즈 시나리오 part II 보안 및 관리(권순만)
[Td 2015]windows 10 엔터프라이즈 시나리오 part II   보안 및 관리(권순만)[Td 2015]windows 10 엔터프라이즈 시나리오 part II   보안 및 관리(권순만)
[Td 2015]windows 10 엔터프라이즈 시나리오 part II 보안 및 관리(권순만)
 
[Td 2015]windows 10 엔터프라이즈 시나리오 part I 배포 및 이미징(박성기)
[Td 2015]windows 10 엔터프라이즈 시나리오 part I   배포 및 이미징(박성기)[Td 2015]windows 10 엔터프라이즈 시나리오 part I   배포 및 이미징(박성기)
[Td 2015]windows 10 엔터프라이즈 시나리오 part I 배포 및 이미징(박성기)
 
[Td 2015]함께하면 더 좋은 windows 10과 인텔 스카이레이크, 아키텍쳐와 인텔 그래픽스 최적화 살펴보기(하태동)
[Td 2015]함께하면 더 좋은 windows 10과 인텔 스카이레이크, 아키텍쳐와 인텔 그래픽스 최적화 살펴보기(하태동)[Td 2015]함께하면 더 좋은 windows 10과 인텔 스카이레이크, 아키텍쳐와 인텔 그래픽스 최적화 살펴보기(하태동)
[Td 2015]함께하면 더 좋은 windows 10과 인텔 스카이레이크, 아키텍쳐와 인텔 그래픽스 최적화 살펴보기(하태동)
 
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
[Td 2015]프로그래밍 언어의 f1머신 c++을 타고 windows 10 uwp 앱 개발의 세계로~(유영천)
 
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
 
[Td 2015]조막만한 화면에서 대박만한 화면까지. 고생 끝 적응(adaptive ui) 시작(권영철)
[Td 2015]조막만한 화면에서 대박만한 화면까지. 고생 끝 적응(adaptive ui) 시작(권영철)[Td 2015]조막만한 화면에서 대박만한 화면까지. 고생 끝 적응(adaptive ui) 시작(권영철)
[Td 2015]조막만한 화면에서 대박만한 화면까지. 고생 끝 적응(adaptive ui) 시작(권영철)
 
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
 
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)
[Td 2015]박애주의 office 365, 멀티플랫폼과 사랑에 빠지다(최한홍)
 
[Td 2015]맨땅에 헤딩하고 터득한 스토어 공략법(돈벌기)(육주용)
[Td 2015]맨땅에 헤딩하고 터득한 스토어 공략법(돈벌기)(육주용)[Td 2015]맨땅에 헤딩하고 터득한 스토어 공략법(돈벌기)(육주용)
[Td 2015]맨땅에 헤딩하고 터득한 스토어 공략법(돈벌기)(육주용)
 
[Td 2015]라즈베리파이에 windows 10 io t core 맛있게 발라 먹기(유정현)
[Td 2015]라즈베리파이에 windows 10 io t core 맛있게 발라 먹기(유정현)[Td 2015]라즈베리파이에 windows 10 io t core 맛있게 발라 먹기(유정현)
[Td 2015]라즈베리파이에 windows 10 io t core 맛있게 발라 먹기(유정현)
 
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
 
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
[Td 2015]구름 위로 올려 어느 곳에서든 연결되는 서비스 azure 앱 서비스(이종인)
 
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
 
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
 
[Td 2015]python을 azure에서 사용하는법(배권한)
[Td 2015]python을 azure에서 사용하는법(배권한)[Td 2015]python을 azure에서 사용하는법(배권한)
[Td 2015]python을 azure에서 사용하는법(배권한)
 

[Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)

  • 1. 송기수/ OpenSG 틱틱대도 써야 하는 Windows 10 앱 개발 C# Tips & Tricks.
  • 2. 오픈에스지 • OpenSG • 기술이사 • 본 사 : 충남 아산 • 연구소 : 서울 강남 • Solution, Consulting, SI and Education Service based on Microsoft .NET Technology • 제조 자동화 설비, 실시간 모니터링, UX 14:30:38
  • 3. Its all about UWP (UWP : Universal Windows Platform) 1. XAML 2. Tool 3. Databinding Agenda 14:30:38
  • 4. XAML • 새로운 컨트롤 • RelativePanel • SplitView • Adaptive UI • 예)계산기, 설정창 • View States • Adaptive triggers • XAML 성능 • phase rendering • deferred loading 14:30:38
  • 5. 상대적인 설정 값에 의해 자식 컨트롤을 배치 Relative Panel 레이아웃 컨트롤(Panel) Grid Stack Panel Canvas Scroll Viewer Border View Box Wrap Grid Relative Panel 14:30:38
  • 6. <RelativePanel> <Rectangle x:Name="BlueRect" Height="100" Width="200" Fill="Blue" /> <Rectangle x:Name="RedRect" Height="100" Width="100" Fill="Red" RelativePanel.Below="BlueRect" RelativePanel.AlignHorizontalCenterWith="BlueRect" /> </RelativePanel> Relative Panel • 타 Element를 기준으로 상대적 위치, 정렬 설정 • AttachedProperty로 설정됨 14:30:38
  • 7. RelativePanel • 적응형 UI 구현 최적 • 보통 Visual State와 동시 사용됨 <RelativePanel> <Rectangle x:Name="BlueRect" Fill="Blue" /> <Rectangle x:Name="RedRect" RelativePanel.Below="BlueRect" /> </RelativePanel> 정렬 AlignBottomWith AlignHorizontalCenterWith AlignLeftWith AlignRightWith AlignTopWith AlignVerticalCenterWith (패널로부터의)정렬 AlignBottomWithPanel AlignHorizontalCenterWithPanel AlignLeftWithPanel AlignRightWithPanel AlignTopWithPanel AlignVerticalCenterWithPanel 위치 Above Below LeftOf RightOf 14:30:38
  • 11. SplitView • IsPaneOpen : True/False • DisplayMode : Inline/Overlay/CompactInline/CompactOverlay IsPaneOpen="True" IsPaneOpen="False" DisplayMode= "Inline" DisplayMode= "Overlay" DisplayMode= "CompactInline" DisplayMode= "CompactOverlay" 14:30:39
  • 14. Adaptive UI • Visual States • XAML 정의 • 블랜드를 통해서 정의 가능 • 복잡하게 정의된 효과를 단순하게 선언하여 사용 • 에니메이션, 객체상태… 14:30:39
  • 15. VisualState 상태 전환 방법 • VisualStateManager.Goto(element, state, transition) private void Page_SizeChanged(object sender, SizeChangedEventArgs e) { var state = string.Empty; if (e.NewSize.Width > 361) state = "MinWidth360"; else state = "MinWidth000"; VisualStateManager.GoToState(this, state, true); } 14:30:39
  • 17. Adaptive triggers • 코드없이 XAML에서 설정만으로 상태전환 가능 • 제공되는 기본 트리거 • MinWindowHeight (Taller than this) • MinWindowWidth (Wider than this) <VisualState x:Name="VisualState500min"> <VisualState.StateTriggers> <AdaptiveTrigger MinWindowWidth="501" /> </VisualState.StateTriggers> </VisualState> 14:30:39
  • 19. XAML 성능 • phase rendering • deferred loading 14:30:39
  • 20. X:Phase rendering • 기본값 0 • 작은 값->큰값 순서로 랜더링 수행 • 값이 연속적일 필요는 없음 <DataTemplate x:DataType="model:Monster"> <Grid Width="200" Height="80"> <TextBlock Text="{x:Bind Name}" /> <TextBlock Text="{x:Bind StarSign}" x:Phase="1"/> </Grid> </DataTemplate> 14:30:39
  • 21. deferred loading • 초기 로드되는 요소 최소화 • 요소가 요구되기 전까지는 loading 되지 않는다 • 요소가 요구되는 상황 1. FindName() 2. GetTemplatedChild() (ControlTemplate 일경우) 3. Storyboard & VisualStates (내부적으로 FindName호출함) <StackPanel x:Name="AdditionalProductPage" x:DeferLoadStrategy="Lazy"> <!– your lovely XAML goes here--> </StackPanel> 14:30:39
  • 22. Demo • phase rendering • deferred loading 5:05 14:30:39
  • 23. 2 Tool • 비주얼 스튜디오 2015 의 새로운 기능 • 진단도구 • 중단점 • 직접실행창 : LINQ • peek view • 라이브 시각적 트리 • 라이브 속성 탐색기 14:30:39
  • 24. Demo • 진단도구 • 중단점 • 직접실행창 : LINQ • peek view • 라이브 시각적 트리 • 라이브 속성 탐색기 5:20 14:30:39
  • 25. 3 Databinding • XAML Databinding • 기존 바인딩 • Classic Binding • {binding} • 컴파일된 바인딩 • Compiled Binding • {x:bind} 5:20 14:30:39
  • 26. 예) 정적 데이터 바인딩 바인딩 표현식 {StaticResource ….} <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <TextBlock Text="나이 : " /> <TextBlock Text="성 : " /> <TextBlock Text="이름 : " /> <TextBlock Text="여성 : " /> … 14:30:39
  • 27. 예) 동적 데이터 바인딩 • 바인딩 표현식 {Binding ….} • DataContext 설정 필요 <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <TextBox Text="{Binding PersonInfo.Age}" /> <TextBox Text="{Binding PersonInfo.LastName}" /> <TextBox Text="{Binding PersonInfo.FirstName}" /> <CheckBox IsChecked="{Binding PersonInfo.IsFemale}" /> … 14:30:39
  • 28. <Page> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <TextBox Text="{Binding PersonInfo.FirstName}" /> … Classic Binding • DataContext : 바인딩 대상 • DataContext의 PersonInfo의 FirstName 속성을 찾음 • DataContext 검색 • 자신의 DataContext 우선 적용 • 자신의 DataContext가 null이면 • Tree 구조상 자신 -> 최상위까지 차례대로 탐색 14:30:39
  • 29. Classic Binding • 장점 • DataContext의 형식이 특정되지 않아도 됨 • 사용이 용이 • 다양하고 유연하게 코드적용가능 • 단점 • 런타임시 타입검사필요->성능이슈 • 디버깅의 어려움 ID FirstName LastName Age Btype Class Address Phone Number Company FirstName Atype Class Address Phone Number Company Ctype Class <Page> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <TextBox Text="{Binding FirstName}" /> … (object) DataContext 14:30:39
  • 30. 바인딩 표현식 #1 <TextBox Text="{Binding Converter ConverterLanguage ConverterParameter ElementName FallbackValue Mode Path RelativeSource Source TargetNullValue UpdateSourceTrigger"} Converter : 컨버터 ElementName : 요소 바인딩 FallbackValue : 기본값(바인딩이 유효하지 않을 때) TargetNullValue : 기본값(대상 값이 null일 때) UpdateSourceTrigger : 소스 반영시점 <TextBox Text="{Binding FirstName}" /> => <TextBox Text="{Binding Path=FirstName}" /> 14:30:39
  • 31. Demo • Classic binding • FallbackValue • TargetNullValue • UpdateSourceTrigger 5:35 14:30:39
  • 32. 컴파일 바인딩 • Compiled binding, {x:Bind}, {Binding ….} • 기존 바인딩 단점 • 런타임시 부하 발생 • 바인딩식 디버깅 어려움 • 바인딩식 컴파일시에 검증 불가능 • 바인딩 대상의 형(Type) 명시 할 수 있다면 • 기존 바인딩 단점 보완 가능 • 런타임시 부하는 적음 • 변환된 코드는 디버깅 가능 • 바인딩식은 컴파일타임에 즉시 검증됨 • 바인딩 선언은 코드로 자동 변환된 후 컴파일 됨 • 기존의 기능과 편리함을 유지 & 성능 향상 14:30:39
  • 33. 컴파일 바인딩 • 바인딩 대상 • DataContext, • 해당 페이지의 멤버만 바인딩 가능 14:30:39
  • 34. 컴파일 바인딩 <Page x:Class="Demo_Databinding.View.ClassicBindingPage1"> <Grid Background="{StaticResource> <TextBox Text="{x:Bind sViewModel.PersonInfo.Age}" /> <TextBox Text="{x:Bind sViewModel.PersonInfo.LastName}" /> <TextBox Text="{x:Bind sViewModel.PersonInfo.FirstName}" /> <CheckBox IsChecked="{x:Bind sViewModel.PersonInfo.IsFemale}" /> … public sealed partial class CompiledBindingPage : Page { public SampleViewModel sViewModel { get; set; } public CompiledBindingPage() { this.InitializeComponent(); sViewModel = new SampleViewModel(); } } 14:30:39
  • 35. 바인딩 표현식 #2 <TextBox Text="{Binding Converter ConverterLanguage ConverterParameter ElementName FallbackValue Mode Path RelativeSource Source TargetNullValue UpdateSourceTrigger"} <TextBox Text="{x:Bind Converter ConverterLanguage ConverterParameter ElementName FallbackValue Mode Path RelativeSource Source TargetNullValue UpdateSourceTrigger"} 14:30:39
  • 37. 컴파일 바인딩 • Data Templates <ListView ItemsSource="{x:Bind ViewModel.Employees}"> <ListView.ItemTemplate> <DataTemplate x:DataType="model:Employee"> <TextBlock Text="{x:Bind Name}"/> </DataTemplate> </ListView.ItemTemplate> </ListView> 14:30:40
  • 38. 컴파일 바인딩 • 이벤트 바인딩 <Button Click="btnSelectEmployee_Click">사원 정보 선택</Button> <Button Click="{x:Bind Select}">사원 정보 선택</Button> 14:30:40
  • 39. 컴파일 바인딩 • 이벤트 바인딩 • 적용 가능한 함수 시그니처 • void Select() • void Select(object sender, RoutedEventArgs e) • void Select(object sender, object e) • 오버로딩은 지원되지 않는다->하나의 메서드만 존재해야 함 • 모든 이벤트에 적용 가능함 • ICommand & EventToCommand 대신 사용 가능함 • 인자 전달, CanExecute와 같은 기능은 포함하지 않음 <Button Click="{x:Bind Select}">사원 정보 선택</Button> <Button Click="{x:Bind EmplyeeUtil.Select}">사원 정보 선택</Button> 14:30:40
  • 40. 컴파일 바인딩 • 바인딩은 컴파일시에 검증된다 • Strongly-typed 바인딩 • 리플렉션을 사용하지 않는다 • 페이지 자신의 멤버를 바인딩 • DataContext와는 무관함 • 기본 모드는 OneTime • Classic Binding에서는 OneWay가 기본 모드임 • 기존의 OneWay, TwoWay 모드도 가능함 • 기타 표준 바인딩 원리 준수 • INotifyPropertyChanged • INotifyCollectionChanged • IObservableVector 14:30:40
  • 41. 컴파일 바인딩 : 고려할 점 • MVVM에서 적용? • View와 ViewModel과의 coupling 문제 • View 수준에서 ViewModel을 멤버로 가지고 있어야 함 • JSON객체 혹은 untyped object일 경우 사용불가 • Classic Binding을 사용 • 스타일에서의 사용 • {x:Bind}은 style에서 setters 로는 사용 불가 • {x:Bind}은 style에 정의된 DataTemplate 에서는 사용가능 14:30:40
  • 42. {Binding} {x:Bind} 동시사용 • {Binding} {x:Bind} 를 동시에 C# 코드 구성사용 하게 구성 • DataContext와 특정멤버(ViewModel)를 같이 설정함 • XAML에서 {Binding}, {x:Bind}중 어느것을 사용하더라고 동작 public sealed partial class CompiledBindingPage : Page { public SampleViewModel sViewModel { get; set; } public CompiledBindingPage() { this.InitializeComponent(); this.DataContextChanged += (s, e) => { sViewModel = DataContext as SampleViewModel; }; } } 14:30:40
  • 43. Session Summary • XAML • RelativePanel • SplitView • Tool • 진단도구 : CPU, 메모리 • 직접실행창 : LINQ • 라이브 시각적 트리, 속성 탐색기 • Databinding • Classic Binding • Compiled Binding 5:50 14:30:40
  • 44. 감사합니다. • MSDN Forum http://aka.ms/msdnforum • TechNet Forum http://aka.ms/technetforum
  • 45. http://aka.ms/td2015_again TechDays Korea 2015에서 놓치신 세션은 Microsoft 기술 동영상 커뮤니티 Channel 9에서 추후에 다시 보실 수 있습니다.