Почему свойство зависимостей равно null в Loaded()?
Есть страница, на которую добавлен пользовательский элемент управления, галерея изображений. Пространство имён:
xmlns:app="clr-namespace:EnglishSchool"
Элемент управления:
<app:ImageClickableGallery Sources="{Binding ProductPhotoes, Converter={StaticResource FromProductPhotoesToImagesConverter}}"/>
, где конвертер принимает относительный путь до фото из БД и возвращает List<BitmapImage>. Код элемента управления:
public partial class ImageClickableGallery : UserControl
{
public static readonly DependencyProperty SourcesProperty;
public List<BitmapImage> Sources
{
get { return (List<BitmapImage>)GetValue(SourcesProperty); }
set { SetValue(SourcesProperty, value); }
}
static ImageClickableGallery()
{
SourcesProperty = DependencyProperty.Register("Sources", typeof(List<BitmapImage>), typeof(ImageClickableGallery));
}
int currentIndex = 0;
public ImageClickableGallery()
{
InitializeComponent();
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
// Здесь Sources равен null
// Если откомментировать вызов процедуры, то вылезет исключение
// (см. SetImage: Sources.Any() => ArgumentNullException - Sources равен null)
//SetImage();
}
void SetImage()
{
CurrentImage.Source = Sources.Any()
? Sources[currentIndex]
: (BitmapImage)FindResource("Image.Null");
}
private void PreviousButton_Click(object sender, RoutedEventArgs e)
{
// тогда, когда пользователь нажмёт на кнопку, то Sources уже не будет равен null;
// всё сработает как надо
if (currentIndex > 0)
Move(-1);
}
private void NextButton_Click(object sender, RoutedEventArgs e)
{
// тогда, когда пользователь нажмёт на кнопку, то Sources уже не будет равен null;
// всё сработает как надо
if (currentIndex < Sources.Count - 1)
Move(1);
}
void Move(int step)
{
currentIndex += step;
SetImage();
}
}
Спрашивается, а почему в момент возникновения события Loaded Sources равен null, но на момент нажатия пользователем кнопок Sources уже имеет значение? Так должно быть?