【问题标题】:How to bind 1 calendar control to another calendar control ? example if i made changes in 1 calendar it will reflect in another in wpf [duplicate]如何将 1 个日历控件绑定到另一个日历控件?例如,如果我在 1 个日历中进行了更改,它将反映在 wpf 中的另一个 [重复]
【发布时间】:2020-02-21 21:30:07
【问题描述】:

我尝试将 2 个日历与相同的属性绑定,但问题是当我们选择其他月份的日期时,这不会影响另一个日历。

XAML:

<Calendar x:Name="Cal1"  Grid.Column="0" Grid.Row="0" SelectedDate="{Binding Selectdate, Mode=TwoWay}" SelectionMode="MultipleRange" RenderTransformOrigin="0.515,0.478" Margin="85,0,103,337" />

<Calendar x:Name="Cal2"  SelectedDate="{Binding Selectdate, Mode=TwoWay}" Width="192" Grid.Column="1" SelectionMode="MultipleRange" Grid.Row="0" Margin="94,0,94,337"/>

属性:

private DateTime _selectdate;

public DateTime Selectdate
{
    get { return _selectdate; }

    set
    {
        if (value != _selectdate)
        {
            _selectdate = value;
        }
    }
}

【问题讨论】:

  • 你的viewmodel类需要实现INotifyPropertyChanged,并且它的Selectdate属性需要在其值改变时引发PropertyChanged通知。 Here's an example of how to implement INotifyPropertyChanged 在视图模型基类中。获得该基类后,只需从中继承您的视图模型,然后在属性设置器中使用 SetProperty() 方法,如该答案所示。我认为这是这里唯一缺少的东西。如果您遇到麻烦,请告诉我。
  • 您好,感谢您的帮助,我已经尝试过您的建议,但仍然无法按照我的要求工作,例如,我有 2 个名为 cal1 和 cal2 的日历,如果我在 cal1 中选择一个日期cal2 中发生了相同的选择,但如果我尝试更改月份或年份,则它发生在 cal1 而不是 cal2 中。只有当日历中的月份显示相同时,选择操作才有效。
  • 请出示您的代码的新版本。

标签: wpf


【解决方案1】:

正如 Ed Plunkett 所写,要更新您的类需要从 System.ComponentModel 实现 INotifyPropertyChanged 的​​控件。在属性的设置器中,引发 PropertyChanged 事件,以便控件知道属性的值已更改。例如:

using System;
using System.ComponentModel;

namespace Test
{
    class CalendarExample : INotifyPropertyChanged
    {
        private DateTime _selectdate;

        public DateTime Selectdate
        {
            get { return _selectdate; }

            set
            {
                if (value != _selectdate)
                {
                    _selectdate = value;
                    PropertyChanged(this,
                        new PropertyChangedEventArgs(nameof(Selectdate)));
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged = delegate { };
    }
}

正如 Ed 所说,如果这是一个大型应用程序,为了方便起见,可能值得实现一个“视图模型基类”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多