在過去的幾周裏,我一直在使用MVVMCross框架開發跨平臺的應用程序(IOS/Android/WP7)。今天我遇到了一個我不知道如何解決的問題,所以希望你能把我推向正確的方向。將變量從ViewModel傳遞到另一個視圖(MVVMCross)
在IOS我有以下的建設導航到另一個頁面(下面的代碼坐落在一個視圖模型):
KeyValuePair<string,string> kvpAct1 = new KeyValuePair<string, string>("short", ".countertest5");
public IMvxCommand BeckhoffActuator1
{
get
{
return new MvxRelayCommand<Type>((type) => this.RequestNavigate<Beckhoff.BeckhoffActuatorViewModel>(kvpAct1));
}
}
當這個IMvxCommand被觸發(按下按鈕)下一個視圖被加載,在這種情況下是BeckhoffActuatorViewModel。在BeckhoffActuatorView的代碼,我用的是keyvaluepair從上面:
public class BeckhoffActuatorView : MvxTouchDialogViewController<BeckhoffActuatorViewModel>
{
ICollection<string> icol;
public BeckhoffActuatorView(MvxShowViewModelRequest request) : base(request, UITableViewStyle.Grouped, null, true)
{
icol = request.ParameterValues.Values;
}
public override void ViewDidLoad()
{
//Code
}
}
這種結構在IOS工作正常,但我想用我的Android應用程序相同的結構。
ViewModel中的代碼沒有改變,因爲這是MVVM的整個想法。但BackhoffActuatorView的代碼爲Android不同的是:
public class BeckhoffActuatorView : MvxBindingActivityView<BeckhoffSensorViewModel>
{
public ICollection<string> icol;
public BeckhoffActuatorView()
{
Debug.WriteLine("Standard");
}
public BeckhoffActuatorView(MvxShowViewModelRequest request)
{
Debug.WriteLine("Custom");
icol = request.ParameterValues.Values;
}
protected override void OnViewModelSet()
{
SetContentView(Resource.Layout.BeckhoffActuatorView);
}
}
上面的代碼不工作時,MvxBindingActivityView似乎並沒有實現類似的ViewController我在IOS使用的東西。代碼只在標準構造函數中出現,當我完全離開它時,它不會編譯/運行。
有誰知道知道我可以訪問我使用RequestNavigate發送的keyvaluepair?謝謝!
謝謝Stuart,使用Twitter示例我設法解決了我的問題! – David 2012-04-18 08:03:27
幹得好 - 如果你需要另一個參數傳遞的例子,那麼你可以嘗試CustomerManagement和書籍樣本:) – Stuart 2012-04-18 11:36:18