使用MvvmCross 3.5.1時,我發現在android佈局綁定描述中使用MvxFullBinding時,不會在MainThread上調用UpdateTargetFromSource方法。 這是故意的嗎?我認爲它的行爲與RaisePropertyChanged相同。MvxFullBinding不在MainThread上更新
鑑於全像這樣結合:
<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 :-)
謝謝斯圖爾特。我理解不以與RaisePropertyChanged相同的方式執行它的目的,因爲它是INotifyPropertyChanged特定的實現角色。唯一的問題是,我的Model的大部分都是PCL圖層,沒有設備來調用InvokeOnMainThread。除了我們正在從vNext版本遷移整個應用程序,FullBinding無法正常工作。無論如何,感謝您的更新 – tourili
您可以使用Mvx將調用封送到UI線程 - 請求IMvxMainThreadDispatcher - https://github.com/MvvmCross/MvvmCross/blob/3.5/CrossCore/Cirrious.CrossCore/Core/IMvxMainThreadDispatcher。 CS – Stuart