获取Xamarin Forms自定义渲染复选框的价值

时间:2015-10-19 18:19:09

标签: android xamarin xamarin.android xamarin.forms xamarin-forms

我在Xamarin Forms中正确呈现了Checkbox视图:

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);
    }
}

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

1 个答案:

答案 0 :(得分:0)

不要认为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 ()
    {
    }
}

为什么呢? 我倾向于将Platform控件和Xamarin控件之间的关系视为模型 - 视图 - 适配器模式。平台控件是您的视图。您的Xamarin控件是您的模型,您的渲染器之间会进行修改。 为了实现这一目标,我们需要在LegalCheckbox(Model)中的某处存储我们想要收集的数据。然后我们必须将其连接起来,以便对View的更改导致模型的更改。因此,我们在View中为OnClick事件添加EventHandler来更新我们的模型。

在OnelementChanged事件期间,所有这些都可能出现在最初的赌注中。然而,它实际上只是在那时连接起来,实际的Checked事件在OnElementChanged完成并且其资源被破坏之后不会发生。因此,我们需要引用OnElementChanged事件处理程序的LegalCheckbox外部,当Clicked事件触发时它仍然存在。