将值返回到MvvmCross中的"父"viewmodel

geo*_*eys 6 mvvmcross

将参数从一个viewmodel传递到另一个viewmodel,修改它然后将其返回到原始viewmodel的推荐方法是什么?

关于将值传递给视图的内容很多,即ShowViewModel(new {paramX = valueY}),但是我无法找到任何有关显示的"子模型"在关闭/解除时将值返回给父级的工作示例在某种方法.

我发现的唯一一个似乎涵盖这个的样本是http://www.gregshackles.com/2012/11/returning-results-from-view-models-in-mvvmcross/但是代码似乎不起作用在新的当前v3 mvx上,在运行时因错误解析viewmodel类型而失败,可能是因为mvx中的反射由于子类型或泛型而无法识别/注册类型.

geo*_*eys 3

在与我的问题链接的作者讨论后,该代码确实可以通过一个小的调整和对我的 View 类的名称的更正来符合 mvvmcross 约定。

我的视图被错误地命名为 SomethingViewController 而不是 SomethingView。

为了在当前 MVX v3 代码库上工作,对 Greg 代码的更改是将他的示例更改为:

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

   protected SubViewModelBase(string messageId)
   {
      MessageId = messageId;
   }
   ....
}
Run Code Online (Sandbox Code Playgroud)

到:

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

   public virtual void Init(string messageId){
      this.MessageId = messageId;
   }
}
Run Code Online (Sandbox Code Playgroud)

当然,在你的子模型中使用

public abstract class MySomeModel : SubViewModelBase<YourReturnType> 
{
   public override void Init(string messageId, other.. parameters..){
      base.Init(messageId);
      .. your other parameters init here..
   }
}
Run Code Online (Sandbox Code Playgroud)