2017-04-08 3 views
1

Ich habe durch Ed Sniders Buch, Mastering Xamarin.Forms gearbeitet. Seite 71 weist darauf hin, eine Klasse, DatePickerEmtryCell, zu erstellen, die von EntryCell erbt. Es wird angezeigt, um die folgende DateTime BindableProperty hinzuzufügen, diese Methode wird jedoch nicht weiter unterstützt und generiert einen Fehler.Xamarin.Forms Benutzerdefinierte DateTime BindableProperty BindingPropertyChangedDelegate

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

Ich denke, dass ich mit dem folgenden auf dem richtigen Weg bin, aber ich bin nicht sicher, wie es zu beenden und bin ganz fest:

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

Ich dachte, es wäre dies

aber das ist falsch, zusammen mit unzähligen anderen Permutationen, die ich versucht habe. Ich würde etwas Anweisung lieben.

Prost

Antwort

2

Da DateProperty statisch ist, sollte propertyChanged Delegierten als auch statisch sein. Da es vom Typ BindingPropertyChangedDelegate ist. Sie können es auf diese Weise versuchen:

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); 

Nun, von den Delegierten, sollten Sie Zugriff auf die BindableObject haben, die Ihr DatePickerEntryCell Element darstellt. Sie haben auch Zugriff auf die alten/neuen Werte. Hier ist, wie Sie das Steuerelement aus dem Delegaten abrufen:

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

Ich hoffe, es hilft!

+0

Vielen Dank, es funktioniert, – user1667474

Verwandte Themen