2015-04-22 40 views
0

使用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 :-)

回答

1

這是INotifyPropertyChanged實施工作,把通知到UI線程

MvxViewModelMvxNotifyPropertyChanged類爲你做這個自動 - 但是如果你實現自己的INotifyPropertyChanged類,那麼你就需要確保PropertyChanged在UI線程中引發。

+0

謝謝斯圖爾特。我理解不以與RaisePropertyChanged相同的方式執行它的目的,因爲它是INotifyPropertyChanged特定的實現角色。唯一的問題是,我的Model的大部分都是PCL圖層,沒有設備來調用InvokeOnMainThread。除了我們正在從vNext版本遷移整個應用程序,FullBinding無法正常工作。無論如何,感謝您的更新 – tourili

+0

您可以使用Mvx將調用封送到UI線程 - 請求IMvxMainThreadDispatcher - https://github.com/MvvmCross/MvvmCross/blob/3.5/CrossCore/Cirrious.CrossCore/Core/IMvxMainThreadDispatcher。 CS – Stuart