【问题标题】:Xamarin Forms DatePicker Not binding with viewmodel property in UWP?Xamarin Forms DatePicker未与UWP中的viewmodel属性绑定?
【发布时间】:2017-12-21 16:47:03
【问题描述】:

我的 DatePicker 没有与 UWP 中的 viewmodel 属性绑定,而它在 android 和 ios 中工作。

我的看法:

<DatePicker x:Name="StartDate" Date="{Binding StartDate, Mode=TwoWay}" Opacity="0.45" HeightRequest="50" Focused="OnScreenTapped" />

视图模型:

private DateTime? _startDate; 

public DateTime? StartDate
 {

    get
    {
       return _startDate;
    }
    set
    {
       _startDate = value;
       OnPropertyChanged("StartDate");
    }
 }

我用StartDate = new DateTime(2000, 01, 01); 初始化了我的日期,但它只显示当前日期...... 此外,当我在日期选择器中更改日期时,视图模型中的日期也不会改变......

感谢任何帮助...谢谢

【问题讨论】:

  • 我认为,问题出在视图模型上的可为空属性中。 This topic 可能会有所帮助。

标签: xamarin.forms xamarin.uwp


【解决方案1】:

我已尝试重现您的问题,但 DatePicker 绑定在我身边有效。您可以参考以下代码来检查您是否遗漏了一些关键步骤。

MainPage.xaml

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:XamarinDatePickerTest"
             x:Class="XamarinDatePickerTest.MainPage"
             xmlns:ViewMode ="clr-namespace:XamarinDatePickerTest.ViewModel"
             xmlns:sys="clr-namespace:System;assembly=System.Runtime"
             >
   <ContentPage.BindingContext>
        <ViewMode:MainPageViewModel/>
    </ContentPage.BindingContext>
    <StackLayout>
        <DatePicker VerticalOptions="CenterAndExpand" Date="{Binding Datetime}">
            <DatePicker.Format>yyyy-MM-dd</DatePicker.Format>
            <DatePicker.MinimumDate>
                <sys:DateTime x:FactoryMethod="Parse">
                    <x:Arguments>
                        <x:String>Jan 1 2000</x:String>
                    </x:Arguments>
                </sys:DateTime>
            </DatePicker.MinimumDate>
        </DatePicker>
    </StackLayout>
</ContentPage>

MainPageViewModel.cs

public class MainPageViewModel : INotifyPropertyChanged
{
    private DateTime? _datetime;

    public DateTime? Datetime
    {
        get => _datetime;

        set
        {
            _datetime = value;
            OnPropertyChanged();
        }
    }
    public MainPageViewModel()
    {
        this.Datetime = new DateTime(2011, 12, 18);
    }
    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        if (PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

我已经把code sample上传到github了,请查收。

【讨论】:

    【解决方案2】:

    刚刚遇到同样的问题。我的问题是可以为空的日期。默认情况下,DatePicker 不允许可以为空的日期(默认为今天的日期),但您可以添加自定义控件以使其工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 2015-01-06
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-25
      相关资源
      最近更新 更多