在过去的几周里,我一直在使用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