2017-06-22 37 views
0

這裏的文檔:在自定義渲染器中,何時應使用SetValueFromRenderer?

https://developer.xamarin.com/api/member/Xamarin.Forms.Element $ Xamarin.Forms.IElementController.SetValueFromRenderer/P/Xamarin.Forms.BindableProperty/System.Object的/

只是說:

從設置一個值渲染器而不破壞綁定屬性上的綁定。

二傳手調用看起來像這樣還有:

set { ((IElementController)this).SetValueFromRenderer(TheProperty, value); } 

但我什麼,它提供不清?我正在通過Xamarin.Forms中的github上的一些代碼來查看,並且我經常使用它,所以我想更好地理解它的目的和正確的用法。

回答

1

結賬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"); 
    } 
} 
+1

謝謝你的很好地解釋了它如何破解的例子!點擊它。 –

相關問題