我正在尝试根据当天是否有人参加(某事)来更改日历的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年后的日期,然后切换回来。显然它不理想所以我需要一个关于如何再次更新按钮的建议)