我想在這裏實現的是帶有MvvmCross的全局加載指示器。MvvmCross:將BaseView屬性綁定到BaseViewModel屬性
從我到目前爲止收集的情況看來,我可以通過使用BaseView和BaseViewModel來實現此目的。 BaseViewModel應該包含BaseView可以綁定到的IsLoading屬性。因此,我可以在我的任何ViewModels中將IsLoading設置爲true,以使指標顯示。
的BaseViewModel看起來是這樣的:
public abstract class BaseViewModel : MvxViewModel
{
private bool _isLoading = false;
public bool IsLoading
{
get { return _isLoading; }
set { _isLoading = value; RaisePropertyChanged(() => IsLoading); }
}
private string _loadingMessage = "Loading...";
public string LoadingMessage
{
get { return _loadingMessage; }
set { _loadingMessage = value; RaisePropertyChanged(() => LoadingMessage); }
}
}
至於綁定到視圖模型,這個問題在這裏解決:https://stackoverflow.com/a/10930788
我能夠成功通過附加到PropertyChanged事件來聽IsLoading,然而,因爲這不是「真正的」綁定,所以如果在附加到事件之前IsLoading設置爲true(例如在加載視圖之前),它將不會觸發。
接下來,我嘗試調用AddBindings以附加到我的BaseViewModel,以便在兩個屬性之間創建一個真正的綁定,儘管這看起來不起作用(沒有錯誤)。
這裏是我的基本視點目前看起來針對iOS:
public abstract class BaseView<TViewModel> : MvxViewController where TViewModel : BaseViewModel
{
public TViewModel ViewModel
{
get { return (TViewModel)base.ViewModel; }
set { base.ViewModel = value; }
}
protected BaseView(string nib, NSBundle bundle) : base(nib, bundle)
{
}
private LoadingOverlay _loadingOverlay;
public override void ViewDidLoad()
{
base.ViewDidLoad();
_loadingOverlay = new LoadingOverlay(View.Frame);
this.AddBindings(new Dictionary<object, string>()
{
{this, "{'IsLoading':{'Path':'IsLoading'}}"},
{_loadingOverlay, "{'LoadingMessage':{'Path':'LoadingMessage'}}"}
});
}
public bool IsLoading
{
set
{
if (value)
View.Add(_loadingOverlay);
else
_loadingOverlay.Hide();
}
}
}
是否有任何陷阱,以AddBindings,我可能不知道的?或者是否有我應該使用的更新的方法?
我感謝幫助,謝謝。