У меня небольшая проблема. Я делаю приложение календаря с некоторыми элементами списка. Каждый вид календаря извлекает «события календаря» из словаря, где TKey = DateTime
и TValue = ObservableCollection <CalendarEvent>
. Теперь это работает отлично для любого календарного дня, где уже есть предопределенные события. Я могу привязывать данные в список к свойству, содержащему ссылку на запись словаря этого конкретного календарного дня. Однако другой особенностью моего приложения должна быть возможность добавлять события во время выполнения. То, что я сделал прямо сейчас, заключается в том, что если в этот конкретный календарный день нет словарного ключа, он просто устанавливает свойство Events равным null, а затем меняю его во время выполнения, если событие было добавлено в этот день, к сожалению, это не похоже чтобы это так, оно не «связывается» должным образом или так сказать.Соблюдение данных привязки данных во время выполнения
Вот код
public CalendarDayView(DateTime date)
{
DataContext = this;
Date = date;
Events = CalendarRepository.Instance.Entries.ContainsKey(date) ? CalendarRepository.Instance.Entries[date] : null;
}
public DateTime Date { get; set; }
public ObservableCollection<CalendarEvent> Events { get; set; }
/// <summary>
/// This method will set the listbox item source to the ObservableCollection if it hasn't been set already
/// </summary>
public void UpdateItemSource()
{
if (Events == null)
// This is the part that doesn't do anything unfortunately
Events = CalendarRepository.Instance.Entries[Date];
}
XAML разметка
<ControlTemplate TargetType="{x:Type local:CalendarDayView}">
<Border BorderBrush="Gray" BorderThickness="0.2" Width="100" Height="100">
<Grid Name="contentGrid">
<ListBox
Name="entriesListBox" Background="LightYellow" FontSize="10"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemsSource="{Binding Events}">
</ListBox>
<!-- Date display below -->
<TextBlock
Name="dateTextBlock" Text="{Binding Date, StringFormat={}{0:dd-MMM}, UpdateSourceTrigger=PropertyChanged}"
FontFamily="Segoe UI Light" FontSize="18" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="5"/>
</Grid>
</Border>
</ControlTemplate>
Спасибо, это именно то, что я искал! –