CalendarDayButton事件触发问题

时间:2018-06-07 14:55:54

标签: wpf calendar

我正在尝试根据当天是否有人参加(某事)来更改日历的CalendarDayButtons的背景颜色。 (针对不同场景的多种颜色)。日历的定义如下。

    <Calendar>
        <Calendar.CalendarDayButtonStyle>
            <Style TargetType="CalendarDayButton" BasedOn="{StaticResource {x:Type CalendarDayButton}}">
                <EventSetter Event="Loaded" Handler="LoadedDayButton" />
            </Style>
        </Calendar.CalendarDayButtonStyle>
    </Calendar>

视图中的LoadedDayButton方法:

     private void LoadedDayButton(object sender, RoutedEventArgs routedEventArgs)
     {
         ((dynamic)DataContext).CurrentDayButton = (CalendarDayButton)sender;
     }

数据上下文是一个ViewModel(我不确定这是正确的方法,我是MVVM的新手,但现在不是我的主要问题)。现在在ViewModel中我有:

    public CalendarDayButton CurrentDayButton
    {
        set
        {
            _MarkDay(value);
            value.DataContextChanged += new DependencyPropertyChangedEventHandler(_RefreshButton);
        }
    }

在_RefreshButton方法中,我只需使用相应的颜色再次标记该按钮:

    private void _RefreshButton(object sender, DependencyPropertyChangedEventArgs args)
    {
        _MarkDay((CalendarDayButton)sender);
    }

在_MarkDay中,我只是从数据库中获取有关当天的信息,并且与按钮的唯一交互是:

button.Background = Brushes.SOMECOLOR;

事情是有效的。需要一些时间来加载整个东西,当我改变月份但它正确更新时也是如此。 但问题是当我点击日期按钮时:由于某种原因,它会多次触发_RefreshButton方法。我将该方法分配给DataContextChanged事件。这是否意味着当我单击按钮时其DataContext会发生变化?它真的会减慢应用程序的速度,我该如何解决这个问题?

(另外的问题是,有时我需要更新日历而不更改月份(其他更改,如选择其他用户,颜色必须相应更改)。我的解决方法是更改​​日历以显示1年后的日期,然后切换回来。显然它不理想所以我需要一个关于如何再次更新按钮的建议)

0 个答案:

没有答案