WPF Calendar: раскрасить даты в разные цвета в зависимости от наличия дат в коллекции

Всем привет. Задача состоит в том, чтобы пользователь мог выбирать дату в календаре и назначать ей определенный цвет. Потом эта инфа будет сохранятся в базе данных. В Control template календаря я добавил Rectangle, которые закрашивается, если находится дата в коллекции. Сейчас я на стадии, когда я могу раскрасить определённые даты, которые я определил в конструкторе конвертера. Однако, как заполнить эту коллекцию через viewmodel понять не могу. Посмотрите, пожалуйста, есть какие-нибудь идеи? Заранее спасибо.

Стиль календаря (Rectangle LossesMark):

<Style x:Key="CalendarDayButtonStyle" TargetType="CalendarDayButton">
        <Setter Property="MinWidth" Value="5" />
        <Setter Property="MinHeight" Value="5" />
        <Setter Property="FontSize" Value="10" />
        <Setter Property="HorizontalContentAlignment" Value="Center" />
        <Setter Property="VerticalContentAlignment" Value="Center" />
        <Setter Property="Foreground" Value="Orange" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="CalendarDayButton">
                    <Grid>
                        <Rectangle
                            x:Name="TodayBackground"
                            Opacity="0"
                            RadiusX="1"
                            RadiusY="1">
                            <Rectangle.Fill>
                                <SolidColorBrush Color="Transparent" />
                            </Rectangle.Fill>
                        </Rectangle>

                        <Rectangle
                            x:Name="SelectedBackground"
                            Opacity="0"
                            RadiusX="1"
                            RadiusY="1">
                            <Rectangle.Fill>
                                <SolidColorBrush Color="Transparent" />
                            </Rectangle.Fill>
                        </Rectangle>

                        <Border
                            Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}" />

                        <Rectangle
                            x:Name="HighlightBackground"
                            Opacity="0"
                            RadiusX="1"
                            RadiusY="1">
                            <Rectangle.Fill>
                                <SolidColorBrush Color="{DynamicResource ControlMouseOverColor}" />
                            </Rectangle.Fill>
                        </Rectangle>

                        <Rectangle
                            x:Name="LossesMarker"
                            Fill="{Binding Converter={converters:CalendarConverter}}"
                            Opacity="1"
                            RadiusX="1"
                            RadiusY="1">
                        </Rectangle>
                 </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>  
</Style>

Конвертер:

public class CalendarConverter : MarkupExtension, IValueConverter
    {

        

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }

        public ObservableCollection<CalendarPainterCollection> LossesList { get; set; }

        public CalendarConverter()
        {
            LossesList = new ObservableCollection<CalendarPainterCollection>();
            LossesList.Add(new CalendarPainterCollection() { Date = new DateTime(2020, 4, 1), Color = "Red" });
            LossesList.Add(new CalendarPainterCollection() { Date = new DateTime(2020, 4, 15), Color = "Green" });
            LossesList.Add(new CalendarPainterCollection() { Date = new DateTime(2020, 4, 28), Color = "Yellow" });
            LossesList.Add(new CalendarPainterCollection() { Date = new DateTime(2020, 5, 2), Color = "Red" });
        }

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {

            string outPut = "Transparent";

            if (value != null)
            {

                DateTime date = (DateTime)value;

                var checkLosses = (from cl in LossesList
                                   where cl.Date.Equals(date)
                                   select cl).ToList();

                if (checkLosses.Count() > 0) { return outPut = checkLosses.Select(s => s.Color).FirstOrDefault(); }
            }

            
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }   
    }

Ответы (0 шт):