弹出窗口中的 Xamarin.Forms 日期选择器

Posted

技术标签:

【中文标题】弹出窗口中的 Xamarin.Forms 日期选择器【英文标题】:Xamarin.Forms Datepicker in PopUp 【发布时间】:2021-12-22 22:51:01 【问题描述】:

我通过 MVVM 使用 Xamarin.Forms 创建了一个项目,我想在其中生成一个通过数据选择器接受两个数据的弹出窗口。用户应指定开始日期和结束日期。因为我已经在其他地方需要它,所以我已经下载了 ACR.UserDialogs NuGet 包。我还设置了一个 DialogService,其中对话框接收三个字符串参数,并且实际上希望为数据选择器提供类似的解决方案。有谁知道我该怎么做?

【问题讨论】:

【参考方案1】:

Nuget 包:rg.plugins.popup、propertychanged.fody

MainView.xaml:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:datepickerpopup="clr-namespace:DatePickerPopup"
             x:Class="DatePickerPopup.MainPage">
    <ContentPage.BindingContext>
        <datepickerpopup:MainViewModel/>
    </ContentPage.BindingContext>
    <StackLayout>
        <Button Text="Open Popup"
                Command="Binding OpenPopup_Command"
                />

        <Label Text="Binding SetDates_.StartDate"/>
        <Label Text="Binding SetDates_.EndDate"/>
    </StackLayout>

</ContentPage>

MainViewModel.cs

using Rg.Plugins.Popup.Services;
using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms;

namespace DatePickerPopup

    public class MainViewModel : BaseViewModel
    
        public SetDates SetDates_  get; set;  = new SetDates();


        public Command OpenPopup_Command => new Command(async () => 
        
            DatePickerPop pop = new DatePickerPop();
            var vm = pop.BindingContext as DatePickerViewModel;
            vm.Save_Command = PopupSave_Command;
            await PopupNavigation.Instance.PushAsync(pop);
        );

        public Command PopupSave_Command => new Command(async(param) => 
        
            SetDates_ = param as SetDates;
            await PopupNavigation.Instance.PopAllAsync();
        );

    



DatePickerPop.xaml

<?xml version="1.0" encoding="utf-8" ?>
<animations:PopupPage  xmlns:animations="http://rotorgames.com"
                       xmlns="http://xamarin.com/schemas/2014/forms"
                        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
                       xmlns:datepickerpopup="clr-namespace:DatePickerPopup"
                       x:Class="DatePickerPopup.DatePickerPop">
    <animations:PopupPage.BindingContext>
        <datepickerpopup:DatePickerViewModel/>
    </animations:PopupPage.BindingContext>
    <StackLayout VerticalOptions="Center"
                 HorizontalOptions="Center"
                 BackgroundColor="White">
        <DatePicker Date="Binding SetDates_.StartDate"/>
        <DatePicker Date="Binding SetDates_.EndDate"/>

        <Button Text="Save"
                Command="Binding Save_Command"
                CommandParameter="Binding SetDates_"/>
        <Button Text="Cancel"
                Command="Binding Cancel_Command"/>
    </StackLayout>
</animations:PopupPage>

DatePickerViewModel.cs

using Rg.Plugins.Popup.Services;
using System;
using System.Collections.Generic;
using System.Text;
using Xamarin.Forms;

namespace DatePickerPopup

    public class DatePickerViewModel : BaseViewModel
    
        public SetDates SetDates_  get; set;  = new SetDates();
        public Command Save_Command  get; set; 
        public Command Cancel_Command => new Command(async () => 
        await PopupNavigation.Instance.PopAsync());
    


SetDates.cs

using System;
using System.Collections.Generic;
using System.Text;

namespace DatePickerPopup

    public class SetDates : BaseViewModel
    
        public DateTime StartDate  get; set; 
        public DateTime EndDate  get; set; 
    


【讨论】:

以上是关于弹出窗口中的 Xamarin.Forms 日期选择器的主要内容,如果未能解决你的问题,请参考以下文章

ContentPage Xamarin.Forms 中的多个弹出窗口

Xamarin.Forms登录对话框及表单验证

从Xamarin Forms中的iOS中的App.OnSleep弹出导航堆栈

如何用xamarin.forms xaml

xamarin.forms Label点击事件怎么实现

Xamarin.Forms 选取器选择背景颜色