Mcx Full Binding 未在主线程上更新
MvxFullBinding not updating on MainThread
对于 MvvmCross 3.5.1,我发现在 android 布局绑定描述中使用 MvxFullBinding 时,不会在 MainThread 上调用 UpdateTargetFromSource 方法。
这是故意的吗?我在想它的行为与 RaisePropertyChanged 相同。
给出这样的完整绑定:
<TextView
style="@style/ValueText"
local:MvxBind="Text SelectedObject.Name" />
包含所选对象的视图模型:
public IMyObject SelectedObject { get; }
所选对象实现 INotifyPropertyChanged 的位置。
如果 Name
属性 更改是从应用程序中的另一个线程通知的,则更新将不会生效,并且会抛出 MainThread
异常:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
感谢您的帮助,祝 MvvmCross 长寿:-)
INotifyPropertyChanged
实现的工作是将通知放入 UI 线程
MvxViewModel
和 MvxNotifyPropertyChanged
类 会自动为您执行此操作 - 但如果您实现自己的 INotifyPropertyChanged
类,那么您将需要确保在 UI 线程上引发 PropertyChanged
。
对于 MvvmCross 3.5.1,我发现在 android 布局绑定描述中使用 MvxFullBinding 时,不会在 MainThread 上调用 UpdateTargetFromSource 方法。 这是故意的吗?我在想它的行为与 RaisePropertyChanged 相同。
给出这样的完整绑定:
<TextView
style="@style/ValueText"
local:MvxBind="Text SelectedObject.Name" />
包含所选对象的视图模型:
public IMyObject SelectedObject { get; }
所选对象实现 INotifyPropertyChanged 的位置。
如果 Name
属性 更改是从应用程序中的另一个线程通知的,则更新将不会生效,并且会抛出 MainThread
异常:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
感谢您的帮助,祝 MvvmCross 长寿:-)
INotifyPropertyChanged
实现的工作是将通知放入 UI 线程
MvxViewModel
和 MvxNotifyPropertyChanged
类 会自动为您执行此操作 - 但如果您实现自己的 INotifyPropertyChanged
类,那么您将需要确保在 UI 线程上引发 PropertyChanged
。