はじめに
XamarinのBindingについてという記事を見つけた。
この記事の内容は、元になるSwitchに応じて、別の複数のSwitchのオン・オフをするという内容。
元記事はすべてC#(コメントではXAMLのみ)で書かれているのだが、練習のためにMVVMで書くとどうなるかやってみた。
コード
ViewModel
MainPageViewModel.cs
using Prism.Mvvm;
using Prism.Navigation;
namespace BindableObjectTest.ViewModels {
public class MainPageViewModel : BindableBase, INavigationAware {
private bool switch1Status;
public bool Switch1Status {
get { return switch1Status; }
set {
SetProperty(ref switch1Status, value);
Switch2Status = switch1Status;
Switch3Status = switch1Status;
}
}
private bool switch2Status;
public bool Switch2Status {
get { return switch2Status; }
set { SetProperty(ref switch2Status, value); }
}
private bool switch3Status;
public bool Switch3Status {
get { return switch3Status; }
set { SetProperty(ref switch3Status, value); }
}
public MainPageViewModel() {
}
public void OnNavigatedFrom(NavigationParameters parameters) {
}
public void OnNavigatedTo(NavigationParameters parameters) {
}
public void OnNavigatingTo(NavigationParameters parameters) {
}
}
}
XAML
MainPage.xaml
<?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:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
prism:ViewModelLocator.AutowireViewModel="True"
x:Class="BindableObjectTest.Views.MainPage"
Title="MainPage">
<StackLayout HorizontalOptions="Center" VerticalOptions="Center">
<Switch IsToggled="{Binding Switch1Status}" />
<Switch IsToggled="{Binding Switch2Status}" />
<Switch IsToggled="{Binding Switch3Status}" />
</StackLayout>
</ContentPage>
結論
個人的には、MVVMで書くほうが動作がわかりやすい気がします。