SlideShare uma empresa Scribd logo
1 de 49
Baixar para ler offline
Windows 10 앱 개발
Tips & Tricks
오픈에스지
기술이사 송기수
오픈에스지
• OpenSG
• Solution, Consulting, SI and Education Service based on
Microsoft .NET Technology
Its all about UWP
UWP : Universal Windows Platform
1. XAML
2. Tool
3. Databinding
Agenda
XAML
• 새로운 컨트롤
• RelativePanel
• SplitView
• Adaptive UI
• 예)계산기, 설정창
• View States
• Adaptive triggers
• XAML 성능
• phase rendering
• deferred loading
상대적인 설정 값에 의해 자식 컨트롤을 배치
Relative Panel
레이아웃 컨트롤(Panel)
Grid
Stack
Panel
Canvas
Scroll
Viewer
Border View Box
Wrap
Grid
Relative
Panel
RelativePanel
• Element는 또 다른 Element의 상대적 위치를 가짐
• RelativePanel.Above = "BlueRect"
• RelativePanel.RightOf = " BlueRect "
• RelativePanel.Below = " BlueRect "
• RelativePanel.LeftOf = " BlueRect“
• 적응형 UI 구현 최적
• 보통 Visual State와 동시 사용됨
<RelativePanel>
<Rectangle x:Name="BlueRect" Fill="Blue" />
<Rectangle x:Name="RedRect" RelativePanel.Below="BlueRect" />
</RelativePanel>
예)
<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를 기준으로 상대적 위치 설정
• 다른 Element를 기준으로 상대적 정렬 설정
• 기존 Panel과 같이 AttachedProperty로 설정됨
<RelativePanel>
<Rectangle x:Name="BlueRect"
Height="100" Width="200" Fill="Blue" />
<Rectangle x:Name="RedRect"
Height="100" Width="100" Fill="Red"
RelativePanel.AlignHorizontalCenterWithPanel="True"
RelativePanel.AlignVerticalCenterWithPanel="True" />
</RelativePanel>
Relative Panel
• Panel을 기준으로 상대적 정렬 설정
Demo
• RelativePanel
SplitView
IsPaneOpen="True" IsPaneOpen="False"
DisplayMode=
"Inline"
DisplayMode=
"Overlay"
DisplayMode=
"CompactInline"
DisplayMode=
"CompactOverlay"
Demo
• SplitView
Adaptive UI
Adaptive UI
• Visual States
• XAML에서 정의됨
• 복잡하게 정의된 효과를 단순하게 선언하여 사용
• 에니메이션등…
• 블랜드를 통해서 정의
• Xaml 직접 정의도 가능
• VisualStateManager.Goto(element, state, transition)
public MainPage()
{
this.InitializeComponent();
this.SizeChanged += (s, e) =>
{
var state = "VisualState000min";
if (e.NewSize.Width > 500)
state = "VisualState500min";
else if (e.NewSize.Width > 800)
state = "VisualState800min";
else if (e.NewSize.Width > 1000)
state = "VisualState1000min";
VisualStateManager.GoToState(this, state, true);
};
}
Adaptive triggers
• 코드없이 XAML에서 설정만으로 상태전환 가능
• 제공되는 기본 트리거
• MinWindowHeight (Taller than this)
• MinWindowWidth (Wider than this)
<VisualState x:Name="VisualState500min">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="501" />
</VisualState.StateTriggers>
</VisualState>
XAML 성능
• phase rendering
• deferred loading
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>
deferred loading
• 초기 로드되는 요소 최소화
• 요소가 요구되기 전까지는 loading 되지 않는다
• 요소가 요구되는 상황
1. FindName()
2. GetTemplatedChild() (ControlTemplate 일경우)
3. Storyboard & VisualStates (내부적으로 FindName호출함)
<StackPanel x:Name="AdditionalProductPage" Visibility="Collapsed"
x:DeferLoadStrategy="Lazy">
<!– your lovely XAML goes here-->
</StackPanel>
deferred loading
• 경량의 proxy element가 대신 생성됨
• 이벤트는 element가 로딩된 후 등록됨
• Binding 동작도 element가 로딩된 후 완성됨
• {x:Bind} 도 동일
2 Tool
• 비주얼 스튜디오 2015 의 새로운 기능
• 진단도구
• 중단점
• 직접실행창 : LINQ
• peek view
• 라이브 시각적 트리
• 라이브 속성 탐색기
진단도구
중단점
직접 실행창
• LINQ 실행가능
라이브 시각적 트리
라이브 속성 탐색기
Demo
• 진단도구
• 중단점
• 직접실행창 : LINQ
• peek view
• 라이브 시각적 트리
• 라이브 속성 탐색기
3 Databinding
• 기존 바인딩 개념
• Classic Binding, {binding}
• 정적/동적 바인딩
• Converter
• INPC/INCC
• 컴파일된 바인딩
• Compiled Binding, {x:bind}
• 이벤트 바인딩
예) 정적 데이터 바인딩
바인딩 표현식 {StaticResource ….}
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<TextBlock Text="나이 : " />
<TextBlock Text="성 : " />
<TextBlock Text="이름 : " />
<TextBlock Text="여성 : " />
…
예) 동적 데이터 바인딩
• 바인딩 표현식 {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}" />
…
INPC
• INotifyPropertyChanged
• UI 업데이트
• Data -> UI
• ViewModel 과 Model에서 주로 구현됨
• 속성값의 변화가 있을 때 특정 이벤트 발생
INCC
• INotifyCollectionChanged
• UI 업데이트
• Data -> UI
• ObservableCollection<T>, ReadOnlyObservableCollection<T>에서 구현됨
• 컬렉션에 변화가 있을 때 특정 이벤트 발생
바인딩 식 #1
<TextBox Text="{Binding
Converter
ConverterLanguage
ConverterParameter
ElementName
FallbackValue
Mode
Path
RelativeSource
Source
TargetNullValue
UpdateSourceTrigger}
Converter : 컨버터
ElementName : 요소 바인딩
FallbackValue : 기본값(바인딩이 유효하지 않을 때)
TargetNullValue : 기본값(대상 값이 null일 때)
UpdateSourceTrigger : 소스 반영시점
Converter
• 바인딩 데이터를 변환하는 역할
• IValueConverter
Data -> UI
데이터를 UI에 표시하기 전에 호출되는 메서드
UI -> Data
UI의 값을 데이터멤버에 할당하기 전에 호출되는 메서드
종종 생략되곤 한다
Demo
• Classic binding
• FallbackValue
• TargetNullValue
• UpdateSourceTrigger
컴파일 바인딩
• compiled binding
• 바인딩 성능 향상 & 기존의 편리함을 유지
• 새로운 데이터 바인딩 원리
• 컴파일타임에 바인딩의 일정작업이 진행됨
• 바인딩식은 컴파일타임에 검증됨
∴
런타임시 부하는 상대적으로 적음
바인딩 선언은 코드로 자동 변환된 후 컴파일 됨
런타임시의 리플렉션 코드 최소화
변환된 코드는 디버깅 가능
바인딩 식 #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}
컴파일 바인딩
• 대상 타입의 명시적인 선언 필요
• =>해당 페이지의 멤버만 바인딩 가능
<Grid Background="{StaticResource
ApplicationPageBackgroundThemeBrush}">
…
<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();
}
}
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
…
<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}" />
…
Demo
• Compiled binding
컴파일 바인딩
• Data Templates
<ListView ItemsSource="{x:Bind ViewModel.Employees}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="model:Employee">
<TextBlock Text="{x:Bind Name}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
컴파일 바인딩
• Resource dictionary
</UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<local:MyTemplates/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<ResourceDictionary x:Class="MyNamespace.MyTemplates"
xmlns:model="using:xBindSampleModel">
<DataTemplate x:Key="MyTemplate" x:DataType="model:Employee">
<TextBlock Text="{x:Bind Name}" />
</DataTemplate>
</ResourceDictionary>
namespace MyNamespace
{
public class MyTemplates
{
public MyTemplates()
{
InitializeComponent();
}
}
}
컴파일 바인딩
• 이벤트 바인딩
• 적용 가능한 함수 시그니처
• 인자 없음 - void Select()
• 이벤트 인자 타입 - void Select(object sender, RoutedEventArgs e)
• - void Select(object sender, object e)
• 오버로딩은 지원되지 않는다->하나의 메서드만 존재해야 함
• 모든 이벤트에 적용 가능함
• Icommand & EventToCommand 대신 사용 가능함
• - 그러나 특정 인자나 혹은 CanExecute와 같은 기능을 포함하지는 않음
<Button Click=“SelectEmployee">사원 정보 선택</Button>
<Button Click="{x:Bind Employee.Select}">사원 정보 선택</Button>
x:Bind
• 컴파일된 바인딩
• 바인딩 표현식은 컴파일시에 검증된다
• Strongly-typed 바인딩
• 리플렉션을 사용하지 않는다
• 페이지 자신의 멤버를 바인딩
• DataContext와는 무관함
• 기본 모드는 OneTime
• 기존의 OneWay, TwoWay 모드도 가능함
• Classic Binding에서는 OneWay가 기본 모드임
• 기타 표준 바인딩 원리 준수
• INotifyPropertyChanged, INotifyCollectionChanged, IObservableVector
x:Bind 고려할 점
• MVVM에서 적용?
• View와 ViewModel과의 coupling 문제
• JSON객체 혹은 untyped object일 경우 사용불가
• Classic Binding을 사용
• 스타일에서의 사용
• {x:Bind}은 style에서 setters 로는 사용 불가
• {x:Bind}은 style에 정의된 DataTemplate 에서는 사용가능
{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;
};
}
}
Session Summary
• XAML
• RelativePanel
• SplitView
• Tool
• 진단도구 : CPU, 메모리
• 직접실행창 : LINQ
• 라이브 시각적 트리, 속성 탐색기
• Databinding
• INPC/INCC
• {x:Bind}
감사합니다!

Mais conteúdo relacionado

Mais procurados

[115] clean fe development_윤지수
[115] clean fe development_윤지수[115] clean fe development_윤지수
[115] clean fe development_윤지수NAVER D2
 
[Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)
[Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)[Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)
[Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)Sang Don Kim
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작Taegon Kim
 
04.모바일 device api_실습교재
04.모바일 device api_실습교재04.모바일 device api_실습교재
04.모바일 device api_실습교재Hankyo
 
Meteor 0.3.6 Preview
Meteor 0.3.6 PreviewMeteor 0.3.6 Preview
Meteor 0.3.6 PreviewJuntai Park
 
20131217 html5
20131217 html520131217 html5
20131217 html5DK Lee
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - PolymerJae Sung Park
 
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)Sang Don Kim
 
발렌타인 웨비너 7회 - React를 이용한 웹 앱 개발 살펴보기
발렌타인 웨비너 7회 - React를 이용한 웹 앱 개발 살펴보기발렌타인 웨비너 7회 - React를 이용한 웹 앱 개발 살펴보기
발렌타인 웨비너 7회 - React를 이용한 웹 앱 개발 살펴보기DoHyun Jung
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)DK Lee
 
Event source 학습 내용 공유
Event source 학습 내용 공유Event source 학습 내용 공유
Event source 학습 내용 공유beom kyun choi
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)DK Lee
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기Taegon Kim
 

Mais procurados (17)

[115] clean fe development_윤지수
[115] clean fe development_윤지수[115] clean fe development_윤지수
[115] clean fe development_윤지수
 
[Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)
[Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)[Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)
[Td 2015]틱틱대도 써야 하는 windows 10 앱 개발, c# tips &amp; tricks(송기수)
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작
 
04.모바일 device api_실습교재
04.모바일 device api_실습교재04.모바일 device api_실습교재
04.모바일 device api_실습교재
 
Meteor 0.3.6 Preview
Meteor 0.3.6 PreviewMeteor 0.3.6 Preview
Meteor 0.3.6 Preview
 
20131217 html5
20131217 html520131217 html5
20131217 html5
 
혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer혁신적인 웹컴포넌트 라이브러리 - Polymer
혁신적인 웹컴포넌트 라이브러리 - Polymer
 
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
[Td 2015]치즈케이크 팩토리는 알겠는데, 데이터 팩토리는 뭔가요(한기환)
 
역시 Redux
역시 Redux역시 Redux
역시 Redux
 
발렌타인 웨비너 7회 - React를 이용한 웹 앱 개발 살펴보기
발렌타인 웨비너 7회 - React를 이용한 웹 앱 개발 살펴보기발렌타인 웨비너 7회 - React를 이용한 웹 앱 개발 살펴보기
발렌타인 웨비너 7회 - React를 이용한 웹 앱 개발 살펴보기
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
Flux 예제 분석 2
Flux 예제 분석 2Flux 예제 분석 2
Flux 예제 분석 2
 
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
 
Event source 학습 내용 공유
Event source 학습 내용 공유Event source 학습 내용 공유
Event source 학습 내용 공유
 
Deview2013 track1 session7
Deview2013 track1 session7Deview2013 track1 session7
Deview2013 track1 session7
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
 
ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기ReactJS로 시작하는 멀티플랫폼 개발하기
ReactJS로 시작하는 멀티플랫폼 개발하기
 

Semelhante a 20150912 windows 10 앱 tips tricks

React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기WebFrameworks
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)DK Lee
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13hungrok
 
Hacosa js study 4주차
Hacosa js study 4주차Hacosa js study 4주차
Hacosa js study 4주차Seong Bong Ji
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)Hankyo
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)Hankyo
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기Jeado Ko
 
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)DK Lee
 
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.장현 한
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020Ji-Woong Choi
 
Web Components 101 polymer & brick
Web Components 101 polymer & brickWeb Components 101 polymer & brick
Web Components 101 polymer & brickyongwoo Jeon
 
Software Architect day - 웹 프레임워크 종결 - metaworks3
Software Architect day - 웹 프레임워크 종결 -  metaworks3Software Architect day - 웹 프레임워크 종결 -  metaworks3
Software Architect day - 웹 프레임워크 종결 - metaworks3uEngine Solutions
 
Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발지수 윤
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 
React native 개발 및 javascript 기본
React native 개발 및 javascript 기본React native 개발 및 javascript 기본
React native 개발 및 javascript 기본Tj .
 
Amazon Translate 를 이용해 서비스에 번역기능 추가해보기
Amazon Translate 를 이용해 서비스에 번역기능 추가해보기Amazon Translate 를 이용해 서비스에 번역기능 추가해보기
Amazon Translate 를 이용해 서비스에 번역기능 추가해보기seungyeonkim23
 
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Sang Seok Lim
 
Java script 기본과 jquery의 활용
Java script 기본과 jquery의 활용Java script 기본과 jquery의 활용
Java script 기본과 jquery의 활용정기 김
 

Semelhante a 20150912 windows 10 앱 tips tricks (20)

React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
 
Hacosa js study 4주차
Hacosa js study 4주차Hacosa js study 4주차
Hacosa js study 4주차
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)
 
자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기자바스크립트 프레임워크 살펴보기
자바스크립트 프레임워크 살펴보기
 
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
 
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
 
Web Components 101 polymer & brick
Web Components 101 polymer & brickWeb Components 101 polymer & brick
Web Components 101 polymer & brick
 
Software Architect day - 웹 프레임워크 종결 - metaworks3
Software Architect day - 웹 프레임워크 종결 -  metaworks3Software Architect day - 웹 프레임워크 종결 -  metaworks3
Software Architect day - 웹 프레임워크 종결 - metaworks3
 
Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발
 
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 개발하기
 
React native 개발 및 javascript 기본
React native 개발 및 javascript 기본React native 개발 및 javascript 기본
React native 개발 및 javascript 기본
 
Amazon Translate 를 이용해 서비스에 번역기능 추가해보기
Amazon Translate 를 이용해 서비스에 번역기능 추가해보기Amazon Translate 를 이용해 서비스에 번역기능 추가해보기
Amazon Translate 를 이용해 서비스에 번역기능 추가해보기
 
Hacosa jquery 1th
Hacosa jquery 1thHacosa jquery 1th
Hacosa jquery 1th
 
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
Angularjs, ionic, cordova 기반 syrup store app 개발 사례 공유
 
Java script 기본과 jquery의 활용
Java script 기본과 jquery의 활용Java script 기본과 jquery의 활용
Java script 기본과 jquery의 활용
 

Mais de 영욱 김

20170701 microsoft 오픈소스의 종류와 활용법
20170701 microsoft 오픈소스의 종류와 활용법20170701 microsoft 오픈소스의 종류와 활용법
20170701 microsoft 오픈소스의 종류와 활용법영욱 김
 
20160511 Azure Datacenter
20160511 Azure Datacenter20160511 Azure Datacenter
20160511 Azure Datacenter영욱 김
 
20160511 azure를 기반으로한 인공지능 io t 생태계 구축 전략
20160511 azure를 기반으로한 인공지능 io t 생태계 구축 전략20160511 azure를 기반으로한 인공지능 io t 생태계 구축 전략
20160511 azure를 기반으로한 인공지능 io t 생태계 구축 전략영욱 김
 
20160412 이미테이션 게임과 it기업들의 인공지능
20160412 이미테이션 게임과 it기업들의 인공지능20160412 이미테이션 게임과 it기업들의 인공지능
20160412 이미테이션 게임과 it기업들의 인공지능영욱 김
 
20160409 서브라임텍스트 대신 visual studio code로 만들어 보는 웹 환경
20160409 서브라임텍스트 대신 visual studio code로 만들어 보는 웹 환경20160409 서브라임텍스트 대신 visual studio code로 만들어 보는 웹 환경
20160409 서브라임텍스트 대신 visual studio code로 만들어 보는 웹 환경영욱 김
 
20160408 smart farm
20160408 smart farm20160408 smart farm
20160408 smart farm영욱 김
 
20151117 IoT를 위한 서비스 구성과 개발
20151117 IoT를 위한 서비스 구성과 개발20151117 IoT를 위한 서비스 구성과 개발
20151117 IoT를 위한 서비스 구성과 개발영욱 김
 
20150728 100분만에 배우는 windows 10 앱 개발
20150728 100분만에 배우는 windows 10 앱 개발20150728 100분만에 배우는 windows 10 앱 개발
20150728 100분만에 배우는 windows 10 앱 개발영욱 김
 
20150912 IoT 디바이스를 위한 windows 10 iot core 입문
20150912 IoT 디바이스를 위한 windows 10 iot core 입문20150912 IoT 디바이스를 위한 windows 10 iot core 입문
20150912 IoT 디바이스를 위한 windows 10 iot core 입문영욱 김
 
20150912 Adaptive UI 권영철
20150912 Adaptive UI 권영철20150912 Adaptive UI 권영철
20150912 Adaptive UI 권영철영욱 김
 
201500912 Hello Windows 10
201500912 Hello Windows 10201500912 Hello Windows 10
201500912 Hello Windows 10영욱 김
 
4시간만에 따라해보는 Windows 10 앱 개발 샘플코드
4시간만에 따라해보는 Windows 10 앱 개발 샘플코드4시간만에 따라해보는 Windows 10 앱 개발 샘플코드
4시간만에 따라해보는 Windows 10 앱 개발 샘플코드영욱 김
 
20150812 4시간만에 따라해보는 windows 10 앱 개발
20150812  4시간만에 따라해보는 windows 10 앱 개발20150812  4시간만에 따라해보는 windows 10 앱 개발
20150812 4시간만에 따라해보는 windows 10 앱 개발영욱 김
 
Arduino Coding
Arduino CodingArduino Coding
Arduino Coding영욱 김
 
C Language For Arduino
C Language For ArduinoC Language For Arduino
C Language For Arduino영욱 김
 
IoT Devices And Arduino
IoT Devices And ArduinoIoT Devices And Arduino
IoT Devices And Arduino영욱 김
 
20150212 사례로보는 Microsoft IoT와 서비스 개발
20150212 사례로보는 Microsoft IoT와 서비스 개발20150212 사례로보는 Microsoft IoT와 서비스 개발
20150212 사례로보는 Microsoft IoT와 서비스 개발영욱 김
 
20150207 Node.js on Azure - MeltingPot seminar in Busan
20150207 Node.js on Azure - MeltingPot seminar in Busan20150207 Node.js on Azure - MeltingPot seminar in Busan
20150207 Node.js on Azure - MeltingPot seminar in Busan영욱 김
 
크로스 플랫폼 기술과 오픈소스로 진화하는 Microsoft의 개발자 생태게
크로스 플랫폼 기술과 오픈소스로 진화하는 Microsoft의 개발자 생태게 크로스 플랫폼 기술과 오픈소스로 진화하는 Microsoft의 개발자 생태게
크로스 플랫폼 기술과 오픈소스로 진화하는 Microsoft의 개발자 생태게 영욱 김
 
20141216 멜팅팟 부산 세션 i - microsoft 사물인터넷
20141216 멜팅팟 부산   세션 i - microsoft 사물인터넷20141216 멜팅팟 부산   세션 i - microsoft 사물인터넷
20141216 멜팅팟 부산 세션 i - microsoft 사물인터넷영욱 김
 

Mais de 영욱 김 (20)

20170701 microsoft 오픈소스의 종류와 활용법
20170701 microsoft 오픈소스의 종류와 활용법20170701 microsoft 오픈소스의 종류와 활용법
20170701 microsoft 오픈소스의 종류와 활용법
 
20160511 Azure Datacenter
20160511 Azure Datacenter20160511 Azure Datacenter
20160511 Azure Datacenter
 
20160511 azure를 기반으로한 인공지능 io t 생태계 구축 전략
20160511 azure를 기반으로한 인공지능 io t 생태계 구축 전략20160511 azure를 기반으로한 인공지능 io t 생태계 구축 전략
20160511 azure를 기반으로한 인공지능 io t 생태계 구축 전략
 
20160412 이미테이션 게임과 it기업들의 인공지능
20160412 이미테이션 게임과 it기업들의 인공지능20160412 이미테이션 게임과 it기업들의 인공지능
20160412 이미테이션 게임과 it기업들의 인공지능
 
20160409 서브라임텍스트 대신 visual studio code로 만들어 보는 웹 환경
20160409 서브라임텍스트 대신 visual studio code로 만들어 보는 웹 환경20160409 서브라임텍스트 대신 visual studio code로 만들어 보는 웹 환경
20160409 서브라임텍스트 대신 visual studio code로 만들어 보는 웹 환경
 
20160408 smart farm
20160408 smart farm20160408 smart farm
20160408 smart farm
 
20151117 IoT를 위한 서비스 구성과 개발
20151117 IoT를 위한 서비스 구성과 개발20151117 IoT를 위한 서비스 구성과 개발
20151117 IoT를 위한 서비스 구성과 개발
 
20150728 100분만에 배우는 windows 10 앱 개발
20150728 100분만에 배우는 windows 10 앱 개발20150728 100분만에 배우는 windows 10 앱 개발
20150728 100분만에 배우는 windows 10 앱 개발
 
20150912 IoT 디바이스를 위한 windows 10 iot core 입문
20150912 IoT 디바이스를 위한 windows 10 iot core 입문20150912 IoT 디바이스를 위한 windows 10 iot core 입문
20150912 IoT 디바이스를 위한 windows 10 iot core 입문
 
20150912 Adaptive UI 권영철
20150912 Adaptive UI 권영철20150912 Adaptive UI 권영철
20150912 Adaptive UI 권영철
 
201500912 Hello Windows 10
201500912 Hello Windows 10201500912 Hello Windows 10
201500912 Hello Windows 10
 
4시간만에 따라해보는 Windows 10 앱 개발 샘플코드
4시간만에 따라해보는 Windows 10 앱 개발 샘플코드4시간만에 따라해보는 Windows 10 앱 개발 샘플코드
4시간만에 따라해보는 Windows 10 앱 개발 샘플코드
 
20150812 4시간만에 따라해보는 windows 10 앱 개발
20150812  4시간만에 따라해보는 windows 10 앱 개발20150812  4시간만에 따라해보는 windows 10 앱 개발
20150812 4시간만에 따라해보는 windows 10 앱 개발
 
Arduino Coding
Arduino CodingArduino Coding
Arduino Coding
 
C Language For Arduino
C Language For ArduinoC Language For Arduino
C Language For Arduino
 
IoT Devices And Arduino
IoT Devices And ArduinoIoT Devices And Arduino
IoT Devices And Arduino
 
20150212 사례로보는 Microsoft IoT와 서비스 개발
20150212 사례로보는 Microsoft IoT와 서비스 개발20150212 사례로보는 Microsoft IoT와 서비스 개발
20150212 사례로보는 Microsoft IoT와 서비스 개발
 
20150207 Node.js on Azure - MeltingPot seminar in Busan
20150207 Node.js on Azure - MeltingPot seminar in Busan20150207 Node.js on Azure - MeltingPot seminar in Busan
20150207 Node.js on Azure - MeltingPot seminar in Busan
 
크로스 플랫폼 기술과 오픈소스로 진화하는 Microsoft의 개발자 생태게
크로스 플랫폼 기술과 오픈소스로 진화하는 Microsoft의 개발자 생태게 크로스 플랫폼 기술과 오픈소스로 진화하는 Microsoft의 개발자 생태게
크로스 플랫폼 기술과 오픈소스로 진화하는 Microsoft의 개발자 생태게
 
20141216 멜팅팟 부산 세션 i - microsoft 사물인터넷
20141216 멜팅팟 부산   세션 i - microsoft 사물인터넷20141216 멜팅팟 부산   세션 i - microsoft 사물인터넷
20141216 멜팅팟 부산 세션 i - microsoft 사물인터넷
 

Último

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 

Último (6)

Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 

20150912 windows 10 앱 tips tricks

  • 1. Windows 10 앱 개발 Tips & Tricks 오픈에스지 기술이사 송기수
  • 2. 오픈에스지 • OpenSG • Solution, Consulting, SI and Education Service based on Microsoft .NET Technology
  • 3. Its all about UWP UWP : Universal Windows Platform 1. XAML 2. Tool 3. Databinding Agenda
  • 4. XAML • 새로운 컨트롤 • RelativePanel • SplitView • Adaptive UI • 예)계산기, 설정창 • View States • Adaptive triggers • XAML 성능 • phase rendering • deferred loading
  • 5. 상대적인 설정 값에 의해 자식 컨트롤을 배치 Relative Panel 레이아웃 컨트롤(Panel) Grid Stack Panel Canvas Scroll Viewer Border View Box Wrap Grid Relative Panel
  • 6. RelativePanel • Element는 또 다른 Element의 상대적 위치를 가짐 • RelativePanel.Above = "BlueRect" • RelativePanel.RightOf = " BlueRect " • RelativePanel.Below = " BlueRect " • RelativePanel.LeftOf = " BlueRect“ • 적응형 UI 구현 최적 • 보통 Visual State와 동시 사용됨 <RelativePanel> <Rectangle x:Name="BlueRect" Fill="Blue" /> <Rectangle x:Name="RedRect" RelativePanel.Below="BlueRect" /> </RelativePanel>
  • 8. <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를 기준으로 상대적 위치 설정 • 다른 Element를 기준으로 상대적 정렬 설정 • 기존 Panel과 같이 AttachedProperty로 설정됨
  • 9. <RelativePanel> <Rectangle x:Name="BlueRect" Height="100" Width="200" Fill="Blue" /> <Rectangle x:Name="RedRect" Height="100" Width="100" Fill="Red" RelativePanel.AlignHorizontalCenterWithPanel="True" RelativePanel.AlignVerticalCenterWithPanel="True" /> </RelativePanel> Relative Panel • Panel을 기준으로 상대적 정렬 설정
  • 11.
  • 15. Adaptive UI • Visual States • XAML에서 정의됨 • 복잡하게 정의된 효과를 단순하게 선언하여 사용 • 에니메이션등… • 블랜드를 통해서 정의 • Xaml 직접 정의도 가능
  • 16. • VisualStateManager.Goto(element, state, transition) public MainPage() { this.InitializeComponent(); this.SizeChanged += (s, e) => { var state = "VisualState000min"; if (e.NewSize.Width > 500) state = "VisualState500min"; else if (e.NewSize.Width > 800) state = "VisualState800min"; else if (e.NewSize.Width > 1000) state = "VisualState1000min"; VisualStateManager.GoToState(this, state, true); }; }
  • 17. Adaptive triggers • 코드없이 XAML에서 설정만으로 상태전환 가능 • 제공되는 기본 트리거 • MinWindowHeight (Taller than this) • MinWindowWidth (Wider than this) <VisualState x:Name="VisualState500min"> <VisualState.StateTriggers> <AdaptiveTrigger MinWindowWidth="501" /> </VisualState.StateTriggers> </VisualState>
  • 18. XAML 성능 • phase rendering • deferred loading
  • 19. 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>
  • 20. deferred loading • 초기 로드되는 요소 최소화 • 요소가 요구되기 전까지는 loading 되지 않는다 • 요소가 요구되는 상황 1. FindName() 2. GetTemplatedChild() (ControlTemplate 일경우) 3. Storyboard & VisualStates (내부적으로 FindName호출함) <StackPanel x:Name="AdditionalProductPage" Visibility="Collapsed" x:DeferLoadStrategy="Lazy"> <!– your lovely XAML goes here--> </StackPanel>
  • 21. deferred loading • 경량의 proxy element가 대신 생성됨 • 이벤트는 element가 로딩된 후 등록됨 • Binding 동작도 element가 로딩된 후 완성됨 • {x:Bind} 도 동일
  • 22. 2 Tool • 비주얼 스튜디오 2015 의 새로운 기능 • 진단도구 • 중단점 • 직접실행창 : LINQ • peek view • 라이브 시각적 트리 • 라이브 속성 탐색기
  • 28. Demo • 진단도구 • 중단점 • 직접실행창 : LINQ • peek view • 라이브 시각적 트리 • 라이브 속성 탐색기
  • 29. 3 Databinding • 기존 바인딩 개념 • Classic Binding, {binding} • 정적/동적 바인딩 • Converter • INPC/INCC • 컴파일된 바인딩 • Compiled Binding, {x:bind} • 이벤트 바인딩
  • 30. 예) 정적 데이터 바인딩 바인딩 표현식 {StaticResource ….} <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <TextBlock Text="나이 : " /> <TextBlock Text="성 : " /> <TextBlock Text="이름 : " /> <TextBlock Text="여성 : " /> …
  • 31. 예) 동적 데이터 바인딩 • 바인딩 표현식 {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}" /> …
  • 32. INPC • INotifyPropertyChanged • UI 업데이트 • Data -> UI • ViewModel 과 Model에서 주로 구현됨 • 속성값의 변화가 있을 때 특정 이벤트 발생
  • 33. INCC • INotifyCollectionChanged • UI 업데이트 • Data -> UI • ObservableCollection<T>, ReadOnlyObservableCollection<T>에서 구현됨 • 컬렉션에 변화가 있을 때 특정 이벤트 발생
  • 34. 바인딩 식 #1 <TextBox Text="{Binding Converter ConverterLanguage ConverterParameter ElementName FallbackValue Mode Path RelativeSource Source TargetNullValue UpdateSourceTrigger} Converter : 컨버터 ElementName : 요소 바인딩 FallbackValue : 기본값(바인딩이 유효하지 않을 때) TargetNullValue : 기본값(대상 값이 null일 때) UpdateSourceTrigger : 소스 반영시점
  • 35. Converter • 바인딩 데이터를 변환하는 역할 • IValueConverter Data -> UI 데이터를 UI에 표시하기 전에 호출되는 메서드 UI -> Data UI의 값을 데이터멤버에 할당하기 전에 호출되는 메서드 종종 생략되곤 한다
  • 36. Demo • Classic binding • FallbackValue • TargetNullValue • UpdateSourceTrigger
  • 37. 컴파일 바인딩 • compiled binding • 바인딩 성능 향상 & 기존의 편리함을 유지 • 새로운 데이터 바인딩 원리 • 컴파일타임에 바인딩의 일정작업이 진행됨 • 바인딩식은 컴파일타임에 검증됨 ∴ 런타임시 부하는 상대적으로 적음 바인딩 선언은 코드로 자동 변환된 후 컴파일 됨 런타임시의 리플렉션 코드 최소화 변환된 코드는 디버깅 가능
  • 38. 바인딩 식 #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}
  • 39. 컴파일 바인딩 • 대상 타입의 명시적인 선언 필요 • =>해당 페이지의 멤버만 바인딩 가능 <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> … <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}" /> …
  • 40. 컴파일 바인딩 public sealed partial class CompiledBindingPage : Page { public SampleViewModel sViewModel { get; set; } public CompiledBindingPage() { this.InitializeComponent(); sViewModel = new SampleViewModel(); } } <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> … <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}" /> …
  • 42. 컴파일 바인딩 • Data Templates <ListView ItemsSource="{x:Bind ViewModel.Employees}"> <ListView.ItemTemplate> <DataTemplate x:DataType="model:Employee"> <TextBlock Text="{x:Bind Name}"/> </DataTemplate> </ListView.ItemTemplate> </ListView>
  • 43. 컴파일 바인딩 • Resource dictionary </UserControl.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <local:MyTemplates/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </UserControl.Resources> <ResourceDictionary x:Class="MyNamespace.MyTemplates" xmlns:model="using:xBindSampleModel"> <DataTemplate x:Key="MyTemplate" x:DataType="model:Employee"> <TextBlock Text="{x:Bind Name}" /> </DataTemplate> </ResourceDictionary> namespace MyNamespace { public class MyTemplates { public MyTemplates() { InitializeComponent(); } } }
  • 44. 컴파일 바인딩 • 이벤트 바인딩 • 적용 가능한 함수 시그니처 • 인자 없음 - void Select() • 이벤트 인자 타입 - void Select(object sender, RoutedEventArgs e) • - void Select(object sender, object e) • 오버로딩은 지원되지 않는다->하나의 메서드만 존재해야 함 • 모든 이벤트에 적용 가능함 • Icommand & EventToCommand 대신 사용 가능함 • - 그러나 특정 인자나 혹은 CanExecute와 같은 기능을 포함하지는 않음 <Button Click=“SelectEmployee">사원 정보 선택</Button> <Button Click="{x:Bind Employee.Select}">사원 정보 선택</Button>
  • 45. x:Bind • 컴파일된 바인딩 • 바인딩 표현식은 컴파일시에 검증된다 • Strongly-typed 바인딩 • 리플렉션을 사용하지 않는다 • 페이지 자신의 멤버를 바인딩 • DataContext와는 무관함 • 기본 모드는 OneTime • 기존의 OneWay, TwoWay 모드도 가능함 • Classic Binding에서는 OneWay가 기본 모드임 • 기타 표준 바인딩 원리 준수 • INotifyPropertyChanged, INotifyCollectionChanged, IObservableVector
  • 46. x:Bind 고려할 점 • MVVM에서 적용? • View와 ViewModel과의 coupling 문제 • JSON객체 혹은 untyped object일 경우 사용불가 • Classic Binding을 사용 • 스타일에서의 사용 • {x:Bind}은 style에서 setters 로는 사용 불가 • {x:Bind}은 style에 정의된 DataTemplate 에서는 사용가능
  • 47. {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; }; } }
  • 48. Session Summary • XAML • RelativePanel • SplitView • Tool • 진단도구 : CPU, 메모리 • 직접실행창 : LINQ • 라이브 시각적 트리, 속성 탐색기 • Databinding • INPC/INCC • {x:Bind}