2017-06-22 19 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

をいただきありがとうございます、私は次の操作を行う場合は、結合は、第二の割り当てで上書きされますどのようにそれが壊れているのかの例とよく説明された答え!それをクリックしました。 –

関連する問題