Xamarin.Forms自定义DateTime BindableProperty BindingPropertyChangedDelegate

时间:2017-04-08 12:12:54

标签: c# xamarin.forms propertychanged

我一直在研究Ed Snider的书,掌握Xamarin.Forms。指示创建一个继承自EntryCell的类DatePickerEmtryCell。 它显示添加以下DateTime BindableProperty,但现在不推荐使用此方法并生成错误。

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

但这是不正确的,以及我尝试过的无数其他排列。 我会喜欢一些指导。

干杯

1 个答案:

答案 0 :(得分:2)

由于DateProperty是静态的,propertyChanged委托也应该是静态的。因为它是BindingPropertyChangedDelegate类型。你可以这样试试:

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

现在,您可以从代理机构访问代表您的BindableObject元素的DatePickerEntryCell。您还可以访问旧/新值。以下是如何从委托中检索控件:

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

希望它有所帮助!