2016-12-30 13 views
0

私はカスタムのレンダラーを持っています。これは、StackLayoutの中に配置されたDatePickerコントロールです。私は、CustomRendererを呼び出すラベルを持ち、日付ピッカーコントロールを表示します。ラベルをタップすると、CustomRenderer(OnElementChanged & & OnElementPropertyChanged)イベントでイベントが発生しません。日付を変更すると、ピッカーイベントが発生し、値が日付ピッカーに設定され、日付ピッカーが閉じます。再度日付ピッカーを開くと、前回の設定日が表示されます。私は現在の日付に変更したいです。私は日付をリセットするイベントはありません。カスタムレンダリングでのイベント発生

OnPlatform x:TypeArguments="View"> 
       <OnPlatform.Android> 
        <local:CustomDatePicker AbsoluteLayout.LayoutBounds="1,0.5,-1,-1" WidthRequest="140" TextColor="Black" Date="{Binding ResourceDate}" 
       AbsoluteLayout.LayoutFlags="PositionProportional"/> 
       </OnPlatform.Android>    
        <OnPlatform.iOS> 
        <Label Text="{Binding ResourceDateIOS}" AbsoluteLayout.LayoutBounds="1,0.5,-1,-1" AbsoluteLayout.LayoutFlags="PositionProportional" FontSize="Small" TextColor="Black" > 
          <Label.GestureRecognizers> 
          <TapGestureRecognizer Command="{Binding OnDateClickIOSForResource}" /> 
          </Label.GestureRecognizers> 
         </Label> 
        </OnPlatform.iOS>    
      </OnPlatform> 

IOSスタックカスタムレンダリング:現在の日付に

using Xamarin.Forms; 
using UIKit; 
using CoreGraphics; 
using Xamarin.Forms.Platform.iOS; 
using System; 
using VCS.FieldManager.UI.ViewModels; 

[assembly: ExportRenderer(typeof(CustomStackLayout), typeof(DatePickerExtendedRender))] 

namespace App.UI.iOS  
{  
class DatePickerExtendedRender : ViewRenderer<CustomStackLayout, UIView> 
    {  
UIDatePicker datePicker = new UIDatePicker(); 

     protected override void OnElementChanged(ElementChangedEventArgs<CustomStackLayout> e) 
     { 

      if (e.OldElement != null || Element == null) 
      { 
       return; 
      } 
      var customStackLayout = e.NewElement; 

      if (customStackLayout != null) 
      {    

       datePicker.Mode = UIDatePickerMode.Date; 

        UIView _view = new UIView() 
       { 
        Frame = new CGRect(10, 200, 50, 50), 
        // BackgroundColor = UIColor.Brown 
       }; 




        datePicker.ValueChanged += (sender, arg) => 
       {     
        var DateChangeEvent = DateTime.SpecifyKind(datePicker.Date.ToDateTime(), DateTimeKind.Utc).ToLocalTime(); 
        var changedDate = DateChangeEvent.ToString("MMMM dd, yyyy"); 
        //shouldnot set in application variable for Add Resources 
        if (GridEntryViewModel.IsResourceDate) 
        { 
         Xamarin.Forms.Application.Current.Properties["ResourceSelectedDate"] = DateChangeEvent.ToString("MMMM dd, yyyy"); 
         datePicker.SetDate(datePicker.Date, true); 
        } 
        else 
        { 
         Xamarin.Forms.Application.Current.Properties["GlobalDateSelected"] = changedDate; 
         GridEntryViewModel.IsResourceDate = false; 
         datePicker.SetDate(datePicker.Date, true); 
        } 
        MessagingCenter.Send(changedDate, "DatePickerCallback"); 
       }; 
        _view.Add(datePicker); 

       SetNativeControl(_view); 

      } 
     } 



     protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) 
     { 
      base.OnElementPropertyChanged(sender, e);   

     } 


    } 
} 
+0

ラベルをクリックしたときにイベントやコマンドを起動する方法を尋ねるだけです。現在のところ、OnDateClickIOSForResourceは起動しておらず、必要なものです。 – David

+0

質問を数回繰り返してください。あなたのラベルをクリックしているサウンドから、データピッカーが表示されています。ただし、日付を選択した後、ラベルを2回クリックすると、前に選択した日付が表示され、代わりに現在の日付が表示されることをお勧めしますか? – David

答えて

0

UIDatepickerのデフォルトを、あなたがそれを変更しない限り。あなたがクラスレベルでDatepickerを導入したので、それは日付を維持します。次のいずれかまたは両方がそれを修正するだろうと思っています。

if (customStackLayout != null) 
      { 
       datePicker = new UIDatePicker(); 

または

if (customStackLayout != null) 
      { 
       datePicker.Date = DateTime.Now; 

ない二いただきましデータ型日付は、あなたがそれをチェックし、必要に応じてそれを設定する必要がありますが、hopefiullyあなたが私のポイントを得ることであるにしてください。

関連する問題