Почему свойство зависимостей равно 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 уже имеет значение? Так должно быть?


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