在MvvmCross中将值返回给“父”视图模型

6
什么是从一个视图模型传递参数到另一个视图模型,修改它然后返回到原始视图模型的推荐方法?
已经有很多关于将值传递给视图的文章,例如 ShowViewModel(new{ paramX=valueY} ),但我无法找到任何能够在关闭/解散子模型时将值返回给父模型的工作示例。
我找到的唯一一个似乎涵盖了这一点的示例是http://www.gregshackles.com/2012/11/returning-results-from-view-models-in-mvvmcross/,但代码似乎在新的当前v3 mvx上无法运行,在运行时出现错误解析视图模型类型,可能是因为mvx中的反射无法识别/注册由于子类型或泛型。
1个回答

3

和我问题中的链接作者讨论后,代码已经可以使用了,只需要进行一个小调整,并更改我的View类名以符合mvvmcross惯例即可。

我的View类名错误地命名为SomethingViewController,而不是SomethingView。

将Greg的示例代码适应当前MVX v3代码库的修改方法是:将其样本从:

public abstract class SubViewModelBase<TResult> : ViewModelBase 
{
   protected string MessageId { get; private set; }

   protected SubViewModelBase(string messageId)
   {
      MessageId = messageId;
   }
   ....
}

to:

public abstract class SubViewModelBase<TResult> : ViewModelBase 
{
   protected string MessageId { get; private set; }

   public virtual void Init(string messageId){
      this.MessageId = messageId;
   }
}

当然,在您的子模型中使用它。
public abstract class MySomeModel : SubViewModelBase<YourReturnType> 
{
   public override void Init(string messageId, other.. parameters..){
      base.Init(messageId);
      .. your other parameters init here..
   }
}

这不是假设父视图模型有对子视图的引用吗?如果没有,那么如何使用Init方法传递messageId? - Klaus Nji
没关系。找到了这篇相关的文章:http://slodge.blogspot.co.uk/2013/03/v3-new-viewmodel-lifecycle.html - Klaus Nji

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接