在更改datePicker中更改日期属性时可以调用函数-xamarin.forms

发布于 2025-02-11 11:45:50 字数 994 浏览 1 评论 0原文

我的视图中有一个日期选择器:

<DatePicker MinimumDate="{Binding Today}" Date="{Binding SelectedDate, Mode=TwoWay}"/>

在我的ViewModel类中,我有这两个属性:

private DateTime selectedDate;
    public DateTime SelectedDate
    {
        get { return selectedDate; }
        set
        {
            selectedDate = value;             
            OnPropertyChanged(nameof(SelectedDate));
            //ExecuteFunction();
        }
    }

    private DateTime today;
    public DateTime Today
    {
        get { return today; }
        set
        {
            today = value;
            OnPropertyChanged(nameof(Today));
            ExecuteFunction();
        }
    }

我想在选择DEDATE更改时执行功能(当用户选择日期时),但我会遇到此错误:

但是,我只有在“今天”属性中(我为测试而做)时可以执行相同的函数。有人知道为什么会发生这种情况吗?

谢谢!

I have a date picker in my view:

<DatePicker MinimumDate="{Binding Today}" Date="{Binding SelectedDate, Mode=TwoWay}"/>

And in my viewModel class i have these two properties:

private DateTime selectedDate;
    public DateTime SelectedDate
    {
        get { return selectedDate; }
        set
        {
            selectedDate = value;             
            OnPropertyChanged(nameof(SelectedDate));
            //ExecuteFunction();
        }
    }

    private DateTime today;
    public DateTime Today
    {
        get { return today; }
        set
        {
            today = value;
            OnPropertyChanged(nameof(Today));
            ExecuteFunction();
        }
    }

I want to execute a function when my SelectedDate changes (when the user chooses the date) but i get this error:

enter image description here

However, i can execute the same function when its only in the "Today" property (i did that for testing). Anyone know why this happens?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甜是你 2025-02-18 11:45:51

现在您已经隔离了这个问题,一个更好的解决方法是更改​​执行功能,以应对日期差。或者,日期不好时不要致电执行功能。

修复的几种可能方法:

  1. 在执行功能中try-catch。

  2. 设置一个断点,找出那个糟糕的日期是什么值。当看到该值时,添加测试以跳过执行功能。

  3. 由于它发生在Initializecomponent期间,这意味着XAML正在设置它 - 几乎可以肯定将其设置为已拥有的值 - 因此您可以将SelectedDate设置器更改为:

set
{
    if (selectedDate != value)
    {
        selectedDate = value;             
        OnPropertyChanged(nameof(SelectedDate));
        ExecuteFunction();
    }
}

Now that you have isolated the problem, a better fix is to change ExecuteFunction so it copes with a bad date. OR don't call ExecuteFunction when the date is bad.

Several possible ways to fix:

  1. Try-catch inside ExecuteFunction.

  2. set a breakpoint, find out what value that bad date is. Add a test to skip ExecuteFunction when that value is seen.

  3. Since it happens during InitializeComponent, that means xaml is setting it - almost certainly setting it to the value it already has - so you could change SelectedDate setter to:

set
{
    if (selectedDate != value)
    {
        selectedDate = value;             
        OnPropertyChanged(nameof(SelectedDate));
        ExecuteFunction();
    }
}
似狗非友 2025-02-18 11:45:50

仅当页面首次加载此代码时,才会发生该函数,当该函数首次加载时不会调用。

private bool First { get; set; } = true;

    private DateTime selectedDate;
    public DateTime SelectedDate
    {
        get { return selectedDate; }
        set
        {
            selectedDate= value;             
            OnPropertyChanged(nameof(SelectedDate));

            if (!First)
            {
                ExecuteFunction();
            }
            else
            {
                First = false;
            }
        }
    }

This only happens when the page loads for the first time with this code the function is not be called when it loads for the first time.

private bool First { get; set; } = true;

    private DateTime selectedDate;
    public DateTime SelectedDate
    {
        get { return selectedDate; }
        set
        {
            selectedDate= value;             
            OnPropertyChanged(nameof(SelectedDate));

            if (!First)
            {
                ExecuteFunction();
            }
            else
            {
                First = false;
            }
        }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文