今回は MVVM な データバインディングを使ってみたいと思います。
Xamarinの公式リファレンスを参考にしました。
Part 5. From Data Bindings to MVVM - Xamarin
XAML
<Grid Grid.Column="5" Grid.ColumnSpan="2" Grid.Row="1" Style="{StaticResource baseGrid}"> <Label Text="{Binding DateValue, StringFormat='今は {0:HH:mm:ss}'}" FontSize="Large"> </Label> </Grid>
前回の内容から、データバインドする内容を時刻に変えました。
モデル
private DateTime dateValue; public DateTime DateValue { set { if (dateValue != value) { dateValue = value; if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("DateValue")); } } } get { return dateValue; } }
前回のものから dateValue の内容を、MVVMに対応したプロパティに実装を変更しました。
クラス名の部分も以下のように変更します。
public class SampleDat : INotifyPropertyChanged
using の追加も必要ですね。
using System.ComponentModel;
データの変更をわかりやすくするために、モデルのコンストラクタへタイマーを実装して時間を更新していきます。
public SampleDat() { Device.StartTimer(TimeSpan.FromSeconds(1), () => { DateValue = DateTime.Now; return true; }); }
Device.StartTimer を使うためにはusingの追加も必要です。
using Xamarin.Forms;
実行結果
これで1秒ごとに時間が更新されるようになりました。
値の変更が通知され、バインド先のラベルが連鎖的に更新されていきます。
このあたりは、ほぼUWPと同じですね。