//private void DatePickerHelper_GotFocus(object sender, RoutedEventArgs e)
        //{
        //    var binding = textBox.GetBindingExpression(PDatePicker.SelectedDateProperty);
        //    var bindinga = textBox.GetBindingExpression(PDatePicker.SelectedPersianDateProperty);


        //}

        //private void DatePickerHelper_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
        //{
        //    var binding = textBox.GetBindingExpression(PDatePicker.SelectedDateProperty);
        //    var bindinga = textBox.GetBindingExpression(PDatePicker.SelectedPersianDateProperty);
        //}

        //void textBox_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
        //{
        //    var binding = textBox.GetBindingExpression(PDatePicker.SelectedDateProperty);
        //    var bindinga = textBox.GetBindingExpression(PDatePicker.SelectedPersianDateProperty);
        //}
        public bool SetValue(object value)
        {
            DateConverterParameter param = GetConverterParameter();
            DateTime?dateTime            = ReadValueFromProperty(value, param);

            (textBox as MyDateTimePicker).SelectedDateTime = dateTime;
            return(true);
        }
 public static object ReadValueFromControl(DateTime?selectedDateTime, DateConverterParameter param)
 {
     //اینجا درسته که اگر نوع خصوصیت تایم اسپن باشه ولی چون کوئری بصورت رشته اعمال میشه اگر تاریخ و زمان هم باشه در دیتابیس فقط زمان ثبت میشود
     //البته میشود بجای رشته انواع دیت تایم یا تایم اسپن هم برگرداند. بعدا بررسی شود آیا بهتر است؟ مثلا اگر قرار است فرمولی حساب بشود با انواعی که از پایگاه داده لود میشود یکسان باشند
     if (selectedDateTime != null && param.valueIsString)
     {
         var date = "";
         var time = "";
         if (!param.hasnotDatePicker)
         {
             if (param.stringDateIsMiladi == false)
             {
                 date = AgentHelper.GetShamsiDateFromMiladi(selectedDateTime.Value);
             }
             else
             {
                 date = selectedDateTime.Value.ToShortDateString();
             }
         }
         if (!param.hasnotTimePicker)
         {
             if (param.stringTimeISAMPMFormat == true)
             {
                 if (param.stringTimeIsMiladi == true)
                 {
                     time = selectedDateTime.Value.ToString("hh:mm tt").ToUpper().Replace("AM", "ق.ظ").Replace("PM", "ب.ظ");
                 }
                 else
                 {
                     time = selectedDateTime.Value.ToString("hh:mm tt");
                 }
             }
             else
             {
                 time = selectedDateTime.Value.ToString("hh:mm:ss");
             }
         }
         return(date + (!string.IsNullOrEmpty(time) ? " " : "") + time);
     }
     else
     {
         return(selectedDateTime);
     }
 }
        //public void ClearBorderColor()
        //{
        //    textBox.BorderBrush = new SolidColorBrush(UIManager.GetColorFromInfoColor(InfoColor.Black));
        //    textBox.BorderThickness = new Thickness(1);
        //}
        public void SetBinding(EntityInstanceProperty property)
        {
            Binding binding = new Binding("Value");

            binding.Source    = property;
            binding.Mode      = BindingMode.TwoWay;
            binding.Converter = new ConverterDate();
            DateConverterParameter param = GetConverterParameter();

            binding.ConverterParameter = param;
            (textBox as MyDateTimePicker).SetBinding(MyDateTimePicker.SelectedDateTimeProperty, binding);
            //if(property.Value!=null)
            //(textBox as MyDateTimePicker).SelectedDateTime = Convert.ToDateTime(property.Value);
            //پارامتر بشن خصوصیات بالا و در کانورتر از همون گت و ست استفاده یشه


            if (valueIsString)
            {
                //if (!hasnotDatePicker && !hasnotTimePicker)
                //{

                //}
                //else if (!hasnotDatePicker)
                //{
                //    if (stringDateIsMiladi == false)
                //        binding.Converter = new ConverterDateOnlyShamsi();
                //    binding.con
                //}
                //else if (!hasnotTimePicker)
                //{
                //if (stringTimeISAMPMFormat == true)
                //{
                //    if (stringTimeIsMiladi == false)
                //        binding.Converter = new ConverterTimeOnlyAMPMShamsi();
                //    else
                //        binding.Converter = new ConverterTimeOnlyAMPM();
                //}
                //else
                //    binding.Converter = new ConverterTimeOnlyLong();

                //}
            }
        }
        public static DateTime?ReadValueFromProperty(object value, DateConverterParameter param)
        {
            DateTime?dateTime = null;

            if (value != null && value.ToString() != "")
            {
                if (param.valueIsString)
                {
                    if (!param.hasnotDatePicker)
                    {
                        string stringdate = null;
                        if (param.hasnotTimePicker)
                        {
                            stringdate = value.ToString();
                        }
                        else
                        {
                            stringdate = value.ToString().Split(' ')[0];
                        }
                        if (param.stringDateIsMiladi == false)
                        {
                            dateTime = AgentHelper.GetMiladiDateFromShamsi(stringdate);
                        }
                        else
                        {
                            dateTime = Convert.ToDateTime(stringdate);
                        }
                    }
                    if (!param.hasnotTimePicker)
                    {
                        string stringtime = null;
                        if (param.hasnotDatePicker)
                        {
                            stringtime = value.ToString();
                        }
                        else
                        {
                            stringtime = value.ToString().Split(" ".ToCharArray(), 2)[1];
                        }
                        if (param.stringTimeIsMiladi == false && param.stringTimeISAMPMFormat == true)
                        {
                            stringtime = stringtime.Replace("ق.ظ", "AM").Replace("ب.ظ", "PM");
                        }

                        DateTime time;
                        if (DateTime.TryParse(stringtime, out time))
                        {
                            if (dateTime == null)
                            {
                                dateTime = time;
                            }
                            else
                            {
                                dateTime = dateTime.Value.Add(time.TimeOfDay);
                            }
                        }
                    }
                }
                else
                {
                    //اگر نوع خصوصیت تایم باشه در دیتابیس مقدار تایم اسپن میاد
                    if (value is TimeSpan)
                    {
                        dateTime = DateTime.Today.Add((TimeSpan)value);
                    }
                    else
                    {
                        dateTime = Convert.ToDateTime(value);
                    }
                }
            }
            return(dateTime);
        }