* 데이터 바인딩은 크게 두가지로 구분한다.
** 소스 : 데이터를 의미한다.
** 타깃 : 컨트롤을 의미한다.
* StaticResource와 DynamicResource같이 Binding은 마크업 확장이다.
* xmlns에서 간단한 바인딩 예제 형태
<StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- 소스1-->
<ScrollBar Name="scroll"
Orientation="Horizontal"
Margin="24"
Maximum="100" LargeChange="10" SmallChange="1"/>
<!-- 타깃1-->
<Label HorizontalAlignment="Center"
Content="{Binding ElementName=scroll, Path=Value}"/>
<!-- 소스2-->
<ScrollBar Name="scroll2"
Orientation="Horizontal"
Margin="24"
Maximum="100" LargeChange="10" SmallChange="1"/>
<!-- 타깃2-->
<Label HorizontalAlignment="Center">
<Label.Content>
<Binding ElementName="scroll2" Path="Value"/>
</Label.Content>
</Label>
</StackPanel>
* 엄밀하게 말하면 바인딩의 정의문 즉, {}안에 문장은 마크업 언어가 아님으로 ""를 붙일수가 없다. 하지만 타깃2처럼 한다면 가능하다. 꼭 "을 붙일거라면 타깃2처럼 사용하면 된다.
* Label.Content는 생략될수 없다. 왜냐면 타깃은 DependencyProperty여야 한다. 즉, 바인딩은 반드시 의존프로퍼티의 지원을 받는 프로퍼티에서 수립되어야 하며, 컨트롤과 엘리먼트는 그 의존 프로퍼티의 변화에 반응하게 설계되어 있기 때문이다.
* Binding Mode
** 사용법
Content="{Binding ElementName=scroll, Path=Value, Mode=OneWay }"
** 종류
OneWay |
소스의 변화를 타킷에 적용한다. |
TwoWay |
소스와 타깃의 변화를 양방향으로 적용한다. |
OneTime |
타깃이 소스로부터 초기화 되지만, 한번만 초기에 반영된다. |
OneWayToSource |
타깃의 변화가 소스에 적용된다. 기본적인 형태의 반대되는 형태다. |
** 기본 모드 : 기본 모드에서는 바인딩이 정의되어 있는 곳의 프로퍼티에 의해 제어 된다.
* DataContext
** 소스를 명시한다.
** 트리구조로 상속된다.
<StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{Binding ElementName=scroll}">
<!--바인딩 소스-->
<ScrollBar Name="scroll"
Orientation="Horizontal"
Margin="24"
Maximum="100" LargeChange="10" SmallChange="1"/>
<Label HorizontalAlignment="Center"
Content="{Binding Path=Value, Mode=OneWay}"/>
<!--바인딩 타깃-->
<Button HorizontalAlignment="Center" Margin="24"
FontSize="{Binding Path=Value, Mode=OneWay}">
Button Font
</Button>
</StackPanel>
* Path는 꼭 Property일 필요는 없다.
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:System;assembly=mscorlib"
FontSize="12pt"
Name="page">
<StackPanel>
<TextBlock HorizontalAlignment="Center">
First element in StackPanel
</TextBlock>
<ListBox HorizontalAlignment="Center"
Margin="24">
<ListBoxItem>First ListBox Item</ListBoxItem>
<ListBoxItem>Second ListBox Item</ListBoxItem>
<ListBoxItem>Third ListBoxItem</ListBoxItem>
<ListBoxItem>Fourth ListBox Item</ListBoxItem>
<ListBoxItem>Fifth ListBoxItem</ListBoxItem>
</ListBox>
<TextBlock HorizontalAlignment="Center">
<Label Content="Number of characters in third ListBox item = " />
<Label Content="{Binding ElementName=page,
Path=Content.Children[1].Items[2].Content.Length}" />
<LineBreak />
<Label Content="Number of characters in selected item = " />
<Label Content="{Binding ElementName=page,
Path=Content.Children[1].SelectedItem.Content.Length}" />
</TextBlock>
</StackPanel>
</Page>
'C#의 속삭임' 카테고리의 다른 글
[C#][WPF] 클래스 계층도 (0) | 2014.04.23 |
---|---|
[C#][WPF] 첫시작. (0) | 2014.04.23 |
[C#][WPF][프레임워크][MVVM] MVVM Light (0) | 2014.04.17 |
[C#][패턴] MVVM (0) | 2014.04.16 |
[C#][AxWebBrowser] AxWebBrowser 컨트롤러 (0) | 2014.04.08 |