私はXamarinフォームとカスタムレンダラーの新機能を使用しています。私はdatepicker用のカスタムレンダラーを書いており、同じものがxamarinフォームで使用されています。Xamarinフォームレンダラーがイベントの変更に応答しない
以下は、私のXAML、ViewModel、およびレンダラークラスのコードです。
XAML:
<flightControls:CustomDatePicker x:Name="FromDatePicker" Date="{Binding FromDate}" >
<flightControls:CustomDatePicker.Behaviors>
<behaviour:CommandBehavior EventName="DateSelected" Command="{Binding FromDateSelectedCommand}" CommandParameter="{Binding Source={x:Reference FromDatePicker}}" />
</flightControls:CustomDatePicker.Behaviors>
</flightControls:CustomDatePicker>
ビューモデル
FROMDATEプロパティ:
private DateTime _fromDate;
public DateTime FromDate
{
get
{
return (_fromDate == default(DateTime)) ? DateTime.Now : _fromDate;
}
set
{
_fromDate = (value == default(DateTime)) ? DateTime.Now : value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("FromDate"));
}
}
FromDateSelectedCommandコマンド:
public ICommand FromDateSelectedCommand { get; set; }
FromDateSelectedCommand = new DelegateCommand<object>(FromDateSelected);
private void FromDateSelected(object selectedDate)
{
FromDate = ((DatePicker)selectedDate).Date;
}
CustomDatePickerクラス:
public class CustomDatePicker : DatePicker
{
}
CustomDatePickerRenderer UWPレンダラ:
public class CustomDatePickerRenderer:ViewRenderer<Xamarin.Forms.DatePicker,Windows.UI.Xaml.Controls.CalendarDatePicker>
{
CalendarDatePicker datePicker = new CalendarDatePicker();
/// <summary>
/// OnElement Changed method to get the Native DatePicker element
/// </summary>
/// <param name="e"></param>
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.DatePicker> e)
{
base.OnElementChanged(e);
if (e.NewElement != null)
{
datePicker.PlaceholderText = "Select Date";
datePicker.Date = e.NewElement.Date;
datePicker.PlaceholderText = "dd-mm-yyyy";
datePicker.DateChanged += DatePicker_DateChanged;
SetNativeControl(datePicker);
}
}
private void DatePicker_DateChanged(CalendarDatePicker sender, CalendarDatePickerDateChangedEventArgs args)
{
}
}
は、どのように私は、レンダラから更新された日付に変更値を取得しますし、戻って私のビューモデルのFROMDATEプロパティに割り当て? DateChangedコマンドがまったく呼び出されないためです。値を返すことで、レンダラーの日付変更イベントで何かを行う必要があると思われます。
現在、FromDateプロパティのデフォルト値はDateTime.Nowであり、ピッカーで日付が変更されると更新されません。
これについての助けに感謝します。
を書かなければならなかった私のCustomDatePickerRenderer DateChangedイベントでは、e.NewElement.BindingContextはあなたのビューモデルでなければなりません。 –