2017-04-08 12 views
1

私はEd Sniderの本「Mastering Xamarin.Forms」を通して作業しています。 EntryCellを継承するDatePickerEmtryCellクラスの作成を指示します。 次のDateTime BindablePropertyを追加するように表示されますが、このメソッドは廃止され、エラーが発生します。Xamarin.FormsカスタムDateTime BindableProperty BindingPropertyChangedDelegate

public static readonly BindableProperty DateProperty = BindableProperty.Create<DatePickerEntryCell, DateTime>(p => 
    p.Date, 
    DateTime.Now, 
    propertyChanged: new BindableProperty.BindingPropertyChangedDelegate<DateTime>(DatePropertyChanged)); 

私は次のように右のトラックにだと思いますが、私はそれを終了するかどうかはわからないし、完全に立ち往生しています:

public static readonly BindableProperty DateProperty = 
    BindableProperty.Create(nameof(Date), typeof(DateTime), typeof(DatePickerEntryCell), default(DateTime), 
     BindingMode.TwoWay, null, new BindableProperty.BindingPropertyChangedDelegate(

私はそれがこの

だろうと思いました
new BindableProperty.BindingPropertyChangedDelegate(DatePickerEntryCell.DatePropertyChanged), null, null);  

しかしこれは間違っており、私が試した無数の他の順列もあります。 私はいくつかの指示が大好きです。

乾杯

答えて

2

DatePropertyが静的​​であるため、propertyChangedデリゲートも静的であるべきです。タイプはBindingPropertyChangedDelegateです。代理人から、あなたのDatePickerEntryCell要素を表しBindableObjectへのアクセス権を持っている必要があり、

public static readonly BindableProperty DateProperty = BindableProperty.Create(
     propertyName: nameof(Date), 
     returnType: typeof(DateTime), 
     declaringType: typeof(DatePickerEntryCell), 
     defaultValue: default(DateTime), 
     defaultBindingMode: BindingMode.TwoWay, 
     validateValue: null, 
     propertyChanged: OnDatePropertyChanged); 

:あなたはこのようにそれを試すことができます。また、古い値または新しい値にアクセスすることもできます。デリゲートからコントロールを取得する方法は次のとおりです。

public static void OnDatePropertyChanged(BindableObject bindable, object oldValue, object newValue) 
{ 
    var control = bindable as DatePickerEntryCell; 
    if (control != null){ 
     // do something with this control... 
    } 
} 

+0

ありがとうございます、 – user1667474

関連する問題