我在UWP应用程序中使用x:Bind(编译绑定)将TextBlock绑定到ViewModel中的整数属性,该属性由值转换器转换为字符串。我正在工作线程的ViewModel中使用一个方法来设置属性并调用PropertyChanged事件。然而,我收到一个异常(具体来说,它在MainPage.g.cs文件的XamlBindingSetters类中),“应用程序调用了一个为不同线程编组的接口。”
According to this post
,这在WPF中应该工作得很好;WinRT/UWP中是否删除了这种简单的功能,或者我做错了什么?
这正是我在做的。
我的属性定义如下:
private int myProperty;
public int MyProperty
{
get { return myProperty; }
set
{
Set(ref myProperty, value);
}
}
Set方法是Template 10库的一部分,定义如下:
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;
}
从我所能看到的情况来看,没有什么问题;它只是确保新值与旧值不同,然后调用RaisePropertyChanged(propertyName),以确保应用程序实际运行(而不是在设计模式下),然后引发PropertyChanged事件。
我从工作线程设置属性:
MyProperty = newValue;
当它到达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;
}
};
它在最后一行(obj.Text=…)中断,并告诉我应用程序调用了为不同线程编组的接口。我做错了什么?