此处的文档:
https://developer.xamarin.com/api/member/Xamarin.Forms.Element $ Xamarin.Forms.IElementController.SetValueFromRenderer / P / Xamarin.Forms.BindableProperty / System.Object的/
简单说明:
在不破坏绑定属性绑定的情况下,从渲染器设置值。
Setter调用也是这样的:
set { ((IElementController)this).SetValueFromRenderer(TheProperty, value); }
但我不清楚它提供了什么?我正在浏览Xamarin.Forms中的github上的一些代码,我发现它经常被使用,所以我想更好地理解它的目的和正确使用。
答案 0 :(得分:2)
结帐Eric's answer。基本上,您将希望使用它来自定义渲染器设置Xamarin Forms Control的属性,而不是直接设置Control的属性。如果您的Control的属性具有OneWay
绑定,则直接从自定义渲染器设置它可能会破坏该绑定。
同样的事情发生在普通的XF ContentPage
中。如果我执行以下操作,则绑定将被第二个赋值覆盖:
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");
}
}