Невозможно обновить пользовательский интерфейс UWP из кода с помощью Dispatcher - PullRequest
0 голосов
/ 08 октября 2019

У меня есть производный класс от MediaTransportControls, и я пытаюсь отключить кнопки предыдущего и следующего трека на основе некоторых событий. Я написал следующее

public class MyMediaTransportControls : MediaTransportControls
{
    public static readonly DependencyProperty IsPreviousTrackButtonEnabledProperty = DependencyProperty.Register(
        "IsPreviousTrackButtonEnabled", typeof(bool), typeof(MyMediaTransportControls), new PropertyMetadata(false, IsPreviousTrackButtonEnabledChangedCallback));

    private static async void IsPreviousTrackButtonEnabledChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var mediaTransportControls = d as MyMediaTransportControls;

        if(mediaTransportControls?.GetTemplateChild("PreviousTrackButton") is Button previousTrackButton)
        {
            await mediaTransportControls.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                previousTrackButton.IsEnabled = (bool)e.NewValue;
            });
        }
    }

    public bool IsPreviousTrackButtonEnabled
    {
        get { return (bool) GetValue(IsPreviousTrackButtonEnabledProperty); }
        set { SetValue(IsPreviousTrackButtonEnabledProperty, value); }
    }
}

Я использовал привязку данных для привязки IsPreviousTrackButtonEnabled с помощью логики ViewModel. Тем не менее, я считаю, что даже если установлено значение previousTrackButton.IsEnabled, это не влияет на пользовательский интерфейс. Иногда, когда отлаживаются, я вижу влияние на пользовательский интерфейс.

Обновление

MediaTransportControls предоставляет собственный ControlTemplate, и я не хочу создавать свой собственный шаблон и связывать его с ним.

1 Ответ

0 голосов
/ 08 октября 2019

Обработать событие уведомления об изменении свойства записи

 INotifyPropertyChanged
...