在MvvmCross N = 26教程中,动态片段通过View中的按钮点击事件加载到一个帧中(下面的代码片段)。但是,我试图找出如何处理ViewModel中的click事件而不是View中的click事件。单击按钮后,如何知道按钮被单击,在视图中,在框架中加载正确的片段?
例如,我可能在FirstView xml中有10个片段和一个帧。我希望能够根据FirstViewModel中引用的对象的属性加载该帧中的任何10个片段。我可以在View中检查该属性并从可用的10个片段加载我想要的片段吗? (即删除View中的but1.Click事件并仍然根据ViewModel中对象的值运行事务)
but1.Click += (sender, args) =>
{
var dNew = new DubFrag()
{
ViewModel = ((SecondViewModel) ViewModel).Sub
};
var trans3 = SupportFragmentManager.BeginTransaction();
trans3.Replace(Resource.Id.subframe1, dNew);
trans3.AddToBackStack(null);
trans3.Commit();
};
答案 0 :(得分:1)
您建议将vm属性映射到要显示的片段的方法应该有效,是的。
要使用它,只需订阅视图代码中已更改的属性(有一些弱引用辅助类和扩展方法可以帮助解决此问题)
或者,这篇博客文章 - http://enginecore.blogspot.ca/2013/06/more-dynamic-android-fragments-with.html?m=1 - 介绍了一个允许按片段导航的迷你框架。
mvvmcross-tutorials片段样本中的莎士比亚样本中使用了类似的方法。
应该可以根据需要调整代码