0

我在 Xamarin Forms 中有一个正确呈现的复选框视图:

public class CheckBoxRenderer : ViewRenderer<LegalCheckbox, CheckBox>
    {
        protected override void OnElementChanged(ElementChangedEventArgs<LegalCheckbox> e)
    {
        base.OnElementChanged (e);
        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));
        this.SetNativeControl(control);
    }
}

我想检查这个复选框是否被选中。有没有办法我可以做到这一点?我需要使用依赖服务吗?

4

1 回答 1

0

不要认为依赖服务会在这里提供帮助,它只是一个 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 的更改会导致对模型的更改。因此,我们在 View 中为 OnClick 事件添加 EventHandler 以更新我们的模型。

乍一看,所有这些都发生在 OneelementChanged 事件期间。然而,它只是在那个时候实际连接起来,实际的 Checked 事件直到 OnElementChanged 完成并且其资源被破坏后很久才会触发。因此,我们需要在 OnElementChanged 事件处理程序之外引用我们的 LegalCheckbox,当 Clicked 事件触发时,它仍然存在。

于 2015-10-19T19:00:45.840 回答