Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

DatePicker abrindo novamente sem clicar no campo

boa tarde pessoal, tudo bem?!

algum de vocês já reparou, não sei se é só comigo, depois que eu escolho uma data no datepicker e dou ok, ele fecha e tudo, mas às vezes ele abre de novo sozinho do nada

alguém já passou por isso? já procurei em tudo quanto é canto e não acho nada a respeito

ocorre usando o código final do nosso projeto de testdrive sem mudar nada (pelo menos eu acho que não mudei nada, rs...)

AgendamentoView.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage
    x:Class="TestDrive.Views.AgendamentoView"
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    Title="{Binding Veiculo.Nome}">
    <StackLayout Margin="25">
        <TableView>
            <TableRoot>
                ...
                <TableSection Title="Agendamento">
                    <ViewCell>
                        <StackLayout Margin="12,0,0,0" Orientation="Horizontal">
                            <Label Text="Data:" />
                            <DatePicker Date="{Binding DataAgendamento}" />
                        </StackLayout>
                    </ViewCell>
                    ...
                </TableSection>
            </TableRoot>
        </TableView>
        <Button Command="{Binding AgendarCommand}" Text="Agendar" />
    </StackLayout>
</ContentPage>

AgendamentoView.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TestDrive.Models;
using TestDrive.ViewModels;
using Xamarin.Forms;

namespace TestDrive.Views
{
    public partial class AgendamentoView : ContentPage
    {
        public AgendamentoViewModel ViewModel { get; set; }

        public AgendamentoView(Veiculo veiculo, Usuario usuario)
        {
            InitializeComponent();
            this.ViewModel = new AgendamentoViewModel(veiculo, usuario);
            this.BindingContext = this.ViewModel;
        }

        ...
    }
}

AgendamentoViewModel.cs

using Newtonsoft.Json;
using SQLite;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using TestDrive.Data;
using TestDrive.Models;
using TestDrive.Services;
using TestDrive.ViewModels;
using Xamarin.Forms;

namespace TestDrive.ViewModels
{
    public class AgendamentoViewModel : BaseViewModel
    {
        public Agendamento Agendamento { get; set; }

        ...

        public DateTime DataAgendamento
        {
            get
            {
                return Agendamento.DataAgendamento;
            }
            set
            {
                Agendamento.DataAgendamento = value;
            }
        }

        ...
5 respostas

Oi Felipe, tudo bem?

Eu me lembro de um problema assim quando eu tinha esquecido de implementar o método override OnDisappearing(). Você tem certeza de que implementou um método OnDisappearing() para cada OnAppearing()?

oi marcelo, bom dia!

tenho sim cara, mas nenhum deles manipula a data diretamente (creio eu)

eu to é frustrado pq eu não acho a solução disso em lugar nenhum e eu estou com o mesmo problema no meu job atual

tenho a impressão que é algo do xamarin

AgendamentoView.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TestDrive.Models;
using TestDrive.ViewModels;
using Xamarin.Forms;

namespace TestDrive.Views
{
    public partial class AgendamentoView : ContentPage
    {
        public AgendamentoViewModel ViewModel { get; set; }

        public AgendamentoView(Veiculo veiculo, Usuario usuario)
        {
            InitializeComponent();
            this.ViewModel = new AgendamentoViewModel(veiculo, usuario);
            this.BindingContext = this.ViewModel;
        }

        protected override void OnAppearing()
        {
            base.OnAppearing();
            AssinarMensagens();
        }

        private void AssinarMensagens()
        {
            MessagingCenter.Subscribe<Agendamento>(this, "Agendamento",
                async (msg) =>
                {
                    var confirma = await DisplayAlert("Salvar Agendamento",
                    "Deseja mesmo enviar o agendamento?",
                    "sim", "não");

                    if (confirma)
                    {
                        this.ViewModel.SalvarAgendamento();
                    }
                });

            MessagingCenter.Subscribe<Agendamento>(this, "SucessoAgendamento",
                async (msg) =>
                {
                    await DisplayAlert("Agendamento", "Agendamento salvo com sucesso!", "ok");
                    await Navigation.PopToRootAsync();
                });

            MessagingCenter.Subscribe<ArgumentException>(this, "FalhaAgendamento",
                async (msg) =>
                {
                    await DisplayAlert("Agendamento", "Falha ao agendar o test drive! Verifique os dados e tente novamente mais tarde!", "ok");
                    await Navigation.PopToRootAsync();
                });
        }

        protected override void OnDisappearing()
        {
            base.OnDisappearing();
            MessagingCenter.Unsubscribe<Agendamento>(this, "Agendamento");
            MessagingCenter.Unsubscribe<Agendamento>(this, "SucessoAgendamento");
            MessagingCenter.Unsubscribe<ArgumentException>(this, "FalhaAgendamento");
        }
    }
}

Oi Felipe

Parece que é um bug recente, que foi resolvido neste chamado:

https://github.com/xamarin/Xamarin.Forms/pull/4344

Essa correção resolve estes problemas:

[Android] Pop Up a picker when changing the page of CarouselPage #4318 https://github.com/xamarin/Xamarin.Forms/issues/4318

[Android] Picker list shows up, when focus is set on other controls. #4187 https://github.com/xamarin/Xamarin.Forms/issues/4187

DatePicker inside TableView raises popup dialogs unexpectedly #4494 https://github.com/xamarin/Xamarin.Forms/issues/4494

Atualize a versão do Xamarin.Forms no NuGet, e veja se o erro foi corrigido.

solução!

era isso mesmo marcelo

problema é que eu estou usando no projeto a última versão 3.4 de novembro e o bug ainda ocorre, não sei se falta algo no meu código do projeto

https://imgur.com/a/UMODxBg

pra resolver eu voltei pra versão 3.2 e por enquanto vou ficar nela mesmo no projeto piloto que ainda está pequeno na empresa onde trabalho

vou me virando aos poucos, depois eu atualizo de novo e olho, achei melhor n agarrar muito nisso

muito obrigado cara! me ajudou muito! brigadão mesmo!!!

;)

Excelente, Felipe, fico feliz que o caso foi solucionado! Parabéns para nós pelo trabalho de investigação em dupla! ;-)