2016-05-08 3 views
0

私はXamarin.formsを使ってアプリケーションを作成しています。整数のBindablePropertyのセッターは、xaml(Xamarin.forms)から呼び出されたことはありません

BindablePropertyを整数に設定しました。 しかし、セッターは決して呼び出されず、xamlからもセットされません。

<... SelectedIndex="{Binding myValue}"> 

何か問題がありますか?

ありがとうございました。

public class CircleSegmentControl : StackLayout 
     { 
      public static readonly BindableProperty SegmentInitialIndexProperty = BindableProperty.Create("SelectedIndex", typeof(int), typeof(CircleSegmentControl), 0); 
      public int SelectedIndex { 
set{ 
Debug.WriteLine("setter"); 
SetValue(SegmentInitialIndexProperty, value); 
SelectIndex(value); 
} 
get{ 
Debug.WriteLine("getter"); 
return (int)GetValue(SegmentInitialIndexProperty); 
} 
} 
    ... 
    } 
+1

Xamarinについてはわかりませんが、おそらくWPF依存プロパティと同じ問題があります。プロパティラッパーの 'get'メソッドと' set'メソッドで 'GetValue'と' SetValue'以外を呼び出さないでください。プロパティ値の変更( 'SelectIndex'メソッドを呼び出す)を通知するには、' BindableProperty.Create'の別のオーバーロードで 'propertyChanged'デリゲートを登録する必要があります。 – Clemens

+0

@クレメンスありがとう。あなたの答えは正しい!これは、propertyChangedデリゲートで呼び出されます。 –

答えて

2

明らかにWPF依存プロパティと同じことが適用されます。あなたがpropertyChangedデリゲートを登録する必要があり、(あなたのSelectIndexメソッドを呼び出すために)プロパティ値の変更について通知を受けるには

public int SelectedIndex 
{ 
    get { return (int)GetValue(SelectedIndexProperty); } 
    set { SetValue(SelectedIndexProperty, value); } 
} 

:あなたは、プロパティラッパーのgetset方法でGetValueSetValueよりも何かを呼び出してはいけませんもう1つの過負荷はBindableProperty.Createです。

+0

Thanks Clements。あなたの答えは正しい。私は別の問題に直面していた。 Bindableプロパティは静的なため、このValueChangedデリゲートは静的である必要があります。だから私はクラスインスタンスにアクセスすることはできません..どのようにこの問題を解決するには? –

+0

申し訳ありません。私はそれを考え出した。デリゲートにはインスタンスとしてのパラメータとしてバインド可能なオブジェクトがあります。 –

関連する問題