Xamarin 在自定义渲染器中,何时应使用SetValueFromRenderer?
此处的文档: $Xamarin.Forms.IElementController.SetValueFromRenderer/p/Xamarin.Forms.BindableProperty/System.Object/ 简单地说: 在不破坏绑定属性上的绑定的情况下,从渲染器设置值 Setter调用也如下所示:Xamarin 在自定义渲染器中,何时应使用SetValueFromRenderer?,xamarin,xamarin.forms,Xamarin,Xamarin.forms,此处的文档: $Xamarin.Forms.IElementController.SetValueFromRenderer/p/Xamarin.Forms.BindableProperty/System.Object/ 简单地说: 在不破坏绑定属性上的绑定的情况下,从渲染器设置值 Setter调用也如下所示: set { ((IElementController)this).SetValueFromRenderer(TheProperty, value); } 但我不清楚它提供了什么?我正在查
set { ((IElementController)this).SetValueFromRenderer(TheProperty, value); }
但我不清楚它提供了什么?我正在查看Xamarin.Forms中github上的一些代码,我看到这些代码被频繁使用,所以我想更好地了解它的用途和正确用法。请查看。基本上,您希望使用它从自定义渲染器设置Xamarin Forms控件的属性,而不是直接设置控件的属性。如果控件的属性具有单向绑定,则直接从自定义呈现程序设置它可能会破坏该绑定
在普通XFContentPage
中也会发生同样的情况。如果执行以下操作,绑定将被第二个赋值覆盖:
Entry entry = new Entry();
entry.SetBinding(Entry.TextProperty, "EntryText"); //Binding is set and good
entry.Text = "blah"; //Binding is overwritten with my hard coded "blah" value
示例
坏的:
好:
谢谢你解释得很好的答案,并举例说明它是如何断裂的!!让它点击。
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) {
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == Entry.TextProperty.PropertyName) {
Element.Text = "Overwritten";
}
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) {
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == Entry.TextProperty.PropertyName) {
((IElementController)Element).SetValueFromRenderer(Entry.TextProperty, "Overwritten");
}
}