获取 Xamarin Forms 自定义呈现复选框的价值
Get value of Xamarin Forms Custom Rendered Checkbox
我有一个在 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);
}
}
我想检查这个复选框是否被选中。有什么办法可以做到这一点?我需要使用依赖服务吗?
不要认为依赖服务会在这里提供帮助它只是一个 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) 的某处存储我们要收集的数据。然后我们必须将它连接起来,以便对视图的更改会导致对模型的更改。因此我们在视图中为 OnClick 事件添加 EventHandler 以更新我们的模型。
乍一看,所有这些都发生在 OnelementChanged 事件期间。然而,它只是在那个时候才真正连接起来,直到 OnElementChanged 完成并且其资源被销毁很久之后,实际的 Checked 事件才会触发。因此,我们需要在 OnElementChanged 事件处理程序之外引用我们的 LegalCheckbox,当 Clicked 事件触发时它仍然存在。
我有一个在 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);
}
}
我想检查这个复选框是否被选中。有什么办法可以做到这一点?我需要使用依赖服务吗?
不要认为依赖服务会在这里提供帮助它只是一个 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) 的某处存储我们要收集的数据。然后我们必须将它连接起来,以便对视图的更改会导致对模型的更改。因此我们在视图中为 OnClick 事件添加 EventHandler 以更新我们的模型。
乍一看,所有这些都发生在 OnelementChanged 事件期间。然而,它只是在那个时候才真正连接起来,直到 OnElementChanged 完成并且其资源被销毁很久之后,实际的 Checked 事件才会触发。因此,我们需要在 OnElementChanged 事件处理程序之外引用我们的 LegalCheckbox,当 Clicked 事件触发时它仍然存在。