UWP: atualizando a interface do usuário através da ligação de dados de um encadeamento em segundo plano

Estou usando x: Bind (ligação compilada) no meu aplicativo UWP para vincular um TextBlock a uma propriedade inteira no ViewModel que é convertida em uma string por um conversor de valor. Estou usando um método no ViewModel no thread de trabalho para definir as propriedades e chamar o evento PropertyChanged. No entanto, estou recebendo uma exceção (especificamente, está na classe XamlBindingSetters no arquivo MainPage.g.cs) dizendo: "O aplicativo chamou uma interface que foi empacotada para um thread diferente".De acordo com este post, isso deve funcionar bem no WPF; Essa facilidade de funcionalidade foi removida no WinRT / UWP ou estou fazendo algo errado?

Aqui está exatamente o que estou fazendo.

Minha propriedade é definida assim:

private int myProperty;

    public int MyProperty
    {
        get { return myProperty; }
        set
        {
            Set(ref myProperty, value);
        }
    }

O método Set faz parte da biblioteca do Modelo 10 e está definido:

public bool Set<T>(ref T storage, T value, [CallerMemberName]string propertyName = null) 
     { 
         if (object.Equals(storage, value)) 
             return false; 
         storage = value; 
         RaisePropertyChanged(propertyName); 
         return true; 
     } 

Nada de errado lá, pelo que posso ver; apenas garante que o novo valor seja diferente do valor antigo e chama RaisePropertyChanged (propertyName), o que garante que o aplicativo esteja em execução (não no modo de design) e, em seguida, gera o evento PropertyChanged.

Defino minha propriedade a partir de um thread de trabalho:

MyProperty = newValue;

e quando chega à classe XamlBindingSetters:

internal class XamlBindingSetters
    {
        public static void Set_Windows_UI_Xaml_Controls_TextBlock_Text(global::Windows.UI.Xaml.Controls.TextBlock obj, global::System.String value, string targetNullValue)
        {
            if (value == null && targetNullValue != null)
            {
                value = targetNullValue;
            }
            obj.Text = value ?? global::System.String.Empty;
        }
    };

ele quebra nessa última linha (obj.Text = ...) e informa que o aplicativo chamou uma interface que foi empacotada para um thread diferente. O que estou fazendo errado?

questionAnswers(1)

yourAnswerToTheQuestion