设为null的BindableProperty的SetValue不会触发PropertyChanged事件

时间:2019-02-27 15:09:07

标签: c# mvvm xamarin.forms

在我开发的Xamarin.Forms项目中,我创建了一个与DateTime一起使用的NullableDatePicker。值。在XF 3.3之前,DatePicker能够设置DateTime? ViewModel的属性设置为null。这不再适用于XF 3.5现在,当我的platformrenderer将XF控件的BindableProperty设置为null时,视图模型的bound属性不会更新。将值更改为DateTime即可。

在搜索XF 3.3和当前XF 3.5之间的变化时,对于绑定到光并没有带来任何重大变化,我希望这里对stackoverflow有所帮助的人。我已经搜索了很多问题的可能原因。

public class ViewModel {
    private DateTime? _date;
    public DateTime? Date{
        get => _date;
        set => SetProperty(ref _date, value);
    }
}

NullableDatePicker : DatePicker {
    public static readonly BindableProperty NullableDateProperty = BindableProperty.Create(nameof(NullableDate), typeof(DateTime?), typeof(NullableDatePicker), null, BindingMode.TwoWay);

public class DateTime? NullableDate
    {
        get { return (DateTime?)GetValue(NullableDateProperty); }
        set { SetValue(NullableDateProperty, value); }
    }
}

public class NullableDatePickerRenderer : DatePickerRenderer
{
    ...
    public void OnClearDateTimeSelection(){
        ((IElementController) Element).SetValueFromRenderer(NullableDatePicker.NullableDateProperty, null);
    ...
    }
}

1 个答案:

答案 0 :(得分:0)

从3.4.0.1008975更新到3.5.X时,我遇到了同样的问题。我还没有找到原因,但是我也不需要更新,这就是我向您推荐的。

版本3.5.X基本上将可绑定的布局添加到XF。如果您不需要它,我建议您将其降级为3.4.0.1008975,以确保它可以正常工作。