XamarinのBindingでご質問
エクセルソフトの田淵さんがこんなことをつぶやいておられました。
Xamarin.Formsのデータバインディングについてです。例えば一つの元スイッチをトグルすると複数の先スイッチが纏めてトグルされるのをやりたいです。元スイッチに複数のBindingを設定できないっぽいんですがどうやるのが良いんでしょうか?
— 田淵 義人@エクセルソフト (@ytabuchi) 2015, 7月 9
まあ、こう考えたのですが。
@ytabuchi 元Modelとなるオブジェクトに元スイッチをTwoWayでBindingして、先スイッチは元ModelにOneWayでBindingする、かな。
— 八雲 (@yakumomo) 2015, 7月 9
実はこうである、と。
@yakumomo 元から複数の先にバインドしたいんです。その時どうすんだろ?と。
— 田淵 義人@エクセルソフト (@ytabuchi) 2015, 7月 9
やってみた
まあ、確かにBinding難しいよなー。
とかつらつら考えながらコーディング。
できました。
BindingContextがミソ
public class App : Xamarin.Forms.Application
{
Switch sw1;
Switch sw2;
Switch sw3;
Entry ent;
public App() {
sw1 = new Switch () {
};
sw2 = new Switch () {
};
sw2.BindingContext = sw1;
sw2.SetBinding (Switch.IsToggledProperty, new Binding ("IsToggled", BindingMode.OneWay));
sw3 = new Switch () {
};
sw3.BindingContext = sw1;
sw3.SetBinding (Switch.IsToggledProperty, new Binding ("IsToggled", BindingMode.OneWay));
ent = new Entry () {
Text = "Hello, world",
};
ent.BindingContext = sw1;
ent.SetBinding (Entry.IsEnabledProperty, new Binding ("IsToggled", BindingMode.OneWay));
MainPage = new ContentPage () {
Content = new StackLayout() {
Padding = new Thickness(0, 20, 0,0),
Orientation = StackOrientation.Vertical,
Children = {
new StackLayout() {
Orientation = StackOrientation.Horizontal,
Children = {
sw1,
new Label() {
Text = "<- switch this",
},
},
},
sw2,
sw3,
ent,
},
},
};
}
}
まあ要するに、先スイッチのBindingContextを元スイッチのオブジェクトにして仕舞えばいいわけですね。
XAMLだと…。
どうするかなぁ。