目次
データバインディングの基本ルール
- ”Name=”, “Path=”は省略可能。
- Source プロパティは BindingContext プロパティよりも優先される。
- BindingContext プロパティの設定は、ビジュアルツリーを介して子要素に継承される。
- TwoWayバインディングの初期化は、まずソースからターゲットへ値が設定される。
XAML
BindingContextでバインド
<?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:SliderTest" x:Class="SliderTest.MainPage"> <StackLayout> <Slider x:Name="uiSlider" Maximum="360" VerticalOptions="CenterAndExpand"/> <Label x:Name="uiLabel" Text="Welcome to Xamarin.Forms!" HorizontalOptions="Center" VerticalOptions="CenterAndExpand" BindingContext="{x:Reference Name=uiSlider}" Rotation="{Binding Path=Value}" /> </StackLayout> </ContentPage>
x:Referenceは他の場所で宣言されているインスタンスを参照します。
Sourceでバインド
<?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:SliderTest" x:Class="SliderTest.MainPage"> <StackLayout> <Slider x:Name="uiSlider" Maximum="360" VerticalOptions="CenterAndExpand"/> <Label x:Name="uiLabel" Text="Welcome to Xamarin.Forms!" HorizontalOptions="Center" VerticalOptions="CenterAndExpand" Rotation="{Binding Path=Value,Source={x:Reference uiSlider}}" /> </StackLayout> </ContentPage>
オブジェクト要素指定
<?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:SliderTest" x:Class="SliderTest.MainPage"> <StackLayout> <Slider x:Name="uiSlider" Maximum="360" VerticalOptions="CenterAndExpand"/> <Label x:Name="uiLabel" Text="Welcome to Xamarin.Forms!" HorizontalOptions="Center" VerticalOptions="CenterAndExpand"> <Label.Rotation> <Binding Path="Value"> <Binding.Source> <x:Reference Name="uiSlider" /> </Binding.Source> </Binding> </Label.Rotation> </Label> </StackLayout> </ContentPage>
マークアップ拡張
x:Reference
他の場所で宣言されているインスタンスを参照する。
x:Static
以下を参照する。
- パブリック静的フィールド
- パブリック静的プロパティ
- パブリック定数フィールド
- 列挙型メンバー
StaticResource
- <ResourceDictionary>内から取得
- <ResourceDictionary>省略可能。<ContentPage.Resources>内に暗黙的に定義される。
<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:SliderTest" x:Class="SliderTest.MainPage">
<ContentPage.Resources>
<ResourceDictionary>
<x:Double x:Key="rot_value">100</x:Double>
<ResourceDictionary>
</ContentPage.Resources>
<StackLayout>
<Label x:Name="uiLabel"
Text="Welcome to Xamarin.Forms!"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
Rotation="{StaticResource rot_value}" />
</StackLayout>
</ContentPage>
BindingContextの継承を利用したバインディング
親要素(StaticLayout)のBindingContextにuiSliderを設定することで、子要素(LabelとBoxView)にuiSliderのValueを適用しています。
<?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:SliderTest" x:Class="SliderTest.MainPage"> <StackLayout> <Slider x:Name="uiSlider" Maximum="360" /> <StackLayout BindingContext="{x:Reference uiSlider}"> <Label x:Name="uiLabel" Text="Welcome to Xamarin.Forms!" HorizontalOptions="Center" VerticalOptions="EndAndExpand" Rotation="{Binding Value}" /> <BoxView Color="#800000FF" WidthRequest="180" HeightRequest="40" HorizontalOptions="Center" VerticalOptions="StartAndExpand" Rotation="{Binding Value}" /> </StackLayout> </StackLayout> </ContentPage>