結賬Eric's answer。基本上你會想用它來從自定義渲染器中設置Xamarin Forms 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");
}
}
謝謝你的很好地解釋了它如何破解的例子!點擊它。 –