Ligação de Dados Não Funciona para a Propriedade Personalizada do Controle do Usuário com Propriedade de Dependência (a janela Saída está limpa)

Nota: Não estou tendo problemas com os controles dentro do Controle do Usuário, como outros artigos semelhantes no StackOverflow, estou tendo uma Propriedade do próprio Controle do Usuário. Estou fazendo um controle personalizado baseado no Canvas, com uma propriedade de dependência (usando o modelo propdb):

public sealed partial class PresentationViewer : Canvas
{

    #region Properties

    public ISlide PresentationSlide
    {
        get
        {
            Debug.WriteLine("Get PresentationSlide");
            return (ISlide)GetValue(PresentationSlideProperty);
        }
        set
        {
            Debug.WriteLine("Set PresentationSlide");
            SetValue(PresentationSlideProperty, value);
            this.ShowSlideContent();
        }
    }

    // Using a DependencyProperty as the backing store for PresentationSlide.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty PresentationSlideProperty =
        DependencyProperty.Register(nameof(PresentationSlide), typeof(ISlide), typeof(PresentationViewer), new PropertyMetadata(null));

    #endregion

    // Other codes...
}

Na minha página, eu uso o controle e vinculo essa propriedade:

    <views:PresentationViewer x:Name="PresentationViewer" PresentationSlide="{Binding CurrentSlide, Mode=TwoWay}" />

É assim que eu configuro asDataContext:

    public MainPage()
    {
        this.InitializeComponent();

        this.ViewModel = new MainPageViewModel();
        this.DataContext = this.ViewModel;
    }

E este é o código do meuMainPageViewModel:

public class MainPageViewModel : INotifyPropertyChanged
{

    // Other codes...

    public ISlide CurrentSlide
    {
        get
        {
            return this.CurrentPresentation?.Slides[this.CurrentSlideIndex];
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void OpenSlide(int index)
    {
        if (index < 0)
        {
            index = 0;
        }

        if (index > this.TotalSlides - 1)
        {
            index = this.TotalSlides - 1;
        }

        this.currentSlideIndexField = index;

        this.PropertyChanged(this, new PropertyChangedEventArgs(nameof(this.CurrentSlideIndex)));

        System.Diagnostics.Debug.WriteLine("Current Slide notified");
        this.PropertyChanged(this, new PropertyChangedEventArgs(nameof(this.CurrentSlide)));

        this.PropertyChanged(this, new PropertyChangedEventArgs(nameof(this.PageCounter)));
    }

}

Observe a linha onde imprimo a notificação deCurrentSlide mudança de propriedade. No entanto, nenhum setter ou getter da propriedade do Controle do Usuário é chamado. Aqui está a saída quandoOpenSlide é chamado (a saída é desde o início do programa):

A ligação já está no modo bidirecional. E outro controle na minha página (Label, etc ...) também é notificado e altera seu conteúdo, como o contador de páginas, então acho que também não é o problema do ViewModel. Estou faltando alguma coisa na minha aula de Controle Personalizado? Como posso fazer a ligação funcionar?

questionAnswers(1)

yourAnswerToTheQuestion