Dependency Services がここで役立つとは思わないでください。単なる IOC コンテナーです。同じ問題に直面した場合、おそらくいくつかのイベントをセットアップするだけです
public class CheckBoxRenderer : ViewRenderer<LegalCheckbox, CheckBox>
{
private LegalCheckbox legalCheckBox;
protected override void OnElementChanged (ElementChangedEventArgs<LegalCheckbox> e)
{
base.OnElementChanged (e);
legalCheckBox = e.NewElement;
CheckBox control = new Android.Widget.CheckBox(this.Context);
control.Checked = false;
control.Text = "I agree to terms";
control.SetTextColor (Android.Graphics.Color.Rgb (60, 60, 60));
base.SetNativeControl(control);
Control.Click+=(sender,evt)=>
legalCheckBox.Checked = ((CheckBox)sender).Checked;
}
}
同様に、ビューに小道具を追加します
public class LegalCheckbox : View
{
public bool Checked {
get;
set;
}
public LegalCheckbox ()
{
}
}
なんで?私は、プラットフォーム コントロールと Xamarin コントロールの関係をモデル - ビュー - アダプター パターンと考える傾向があります。プラットフォーム コントロールはビューです。Xamarin コントロールはモデルであり、レンダラーはモデル間の適応を行います。これを達成するには、LegalCheckbox(Model) のどこかに、収集したいデータを保存する必要があります。次に、ビューを変更するとモデルが変更されるように接続する必要があります。したがって、View の OnClick イベントの EventHandler を追加して、モデルを更新します。
一見すると、これらすべてが OnelementChanged イベント中に発生するように見えるかもしれません。ただし、その時点で実際に配線されているのは、OnElementChanged が完了してそのリソースが破棄されるまで、実際の Checked Event が発生しないだけです。したがって、OnElementChanged イベント ハンドラーの外側にある LegalCheckbox への参照が必要です。これは、Clicked イベントが発生したときにも存在します。