2016-10-12 14 views
2

非常に単純なYes/Noラジオボックスコントロールを作成しました。それにContentViewのBindablePropertyが機能しない

は私がBindablePropertyを以下している背後にあるコードです:

public static readonly BindableProperty SelectedValueProperty = BindableProperty.Create(
     "SelectedValue", 
     typeof(int), 
     typeof(YesNoView), 
     0, 
     BindingMode.TwoWay); 

そして、それは財産だ:

このプロパティは、このような何か使用してContentView-XAMLにバインドされている
public int SelectedValue 
    { 
     get { return (int) GetValue(SelectedValueProperty); } 
     set { SetValue(SelectedValueProperty, value); } 
    } 

  <DataTrigger Binding="{Binding SelectedValue}" Value="0" TargetType="Image"> 
      <Setter Property="Source" Value="radiobutton_checked.png" /> 
      </DataTrigger> 

ContentViewをいくつかのページで使用して、いつでもSelectedValueを一定の値にすると、すべて正常に動作します!

しかし、SomeValueがContentViewを使用しているページのプロパティ(notify)である定数値の代わりに{Binding SomeValue}を使用すると、単に何もしないことになります。私がSomeValueに何らかの値を設定すると、それはContentViewに決して届かず、なぜそれが動作していないのか不自然になってしまいます。

BindablePropertyを調整してpropertyChangedイベントを指定しても、バインディングではなくXamlの定数値に戻さない限り、単にトリガーされません。

私が期待するように、なぜこれが起こっていて動作していないのか、誰にも分かりませんか?

EDIT:ページとビューの両方にBindingContextを追加する必要があります。

答えて

15

私は無駄に合計4時間後にそれを考え出し、それはそれにデータバインドしようとしているページからコンテキストを乗っ取るよう...

は、あなたのContentViewでBindingContext = this;を行うことはありません。代わりに、Content.BindingContext = this;

+0

の好奇心の声を使用してください。「コンテキストを乗っ取る」という意味と、なぜこれが問題なのかを説明できますか? –

+0

また、バインドに 'Source'パラメータを使用してください。 – Krumelur

+0

@ Sven-MichaelStübe: 'ContentView'を使用する*ページは、' BindingContext'を設定します。これはカスタム 'ContentView'を含むすべての子要素に使用されます。コンテンツビューでコンテキストを再度設定した場合は、上書きされます。 – Krumelur

関連する問題