UWP: Actualización de la IU a través del enlace de datos desde un hilo de fondo

Estoy usando x: Bind (enlace compilado) en mi aplicación UWP para vincular un TextBlock a una propiedad entera en ViewModel que se convierte en una cadena mediante un convertidor de valores. Estoy usando un método en ViewModel en el subproceso de trabajo para establecer las propiedades y llamar al evento PropertyChanged. Sin embargo, recibo una excepción (específicamente, está en la clase XamlBindingSetters en el archivo MainPage.g.cs) que dice: "La aplicación llamó a una interfaz que se ordenó para un hilo diferente".De acuerdo con este post, esto debería funcionar bien en WPF; ¿Se ha eliminado esta facilidad de funcionalidad en WinRT / UWP o estoy haciendo algo mal?

Esto es exactamente lo que estoy haciendo.

Mi propiedad se define así:

private int myProperty;

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

El método Set es parte de la biblioteca de la Plantilla 10 y se define:

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; 
     } 

No hay nada malo por lo que puedo ver; solo se asegura de que el nuevo valor sea diferente del valor anterior y luego llama a RaisePropertyChanged (propertyName), lo que garantiza que la aplicación se esté ejecutando realmente (no en modo de diseño) y luego genera el evento PropertyChanged.

Establezco mi propiedad desde un hilo de trabajo:

MyProperty = newValue;

y cuando llega a la clase 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;
        }
    };

se rompe en esa última línea (obj.Text = ...) y me dice que la aplicación llamó a una interfaz que se ordenó para un hilo diferente. ¿Qué estoy haciendo mal?

Respuestas a la pregunta(1)

Su respuesta a la pregunta