【发布时间】:2014-06-06 16:25:10
【问题描述】:
我有一个 MvxViewController 并在 ViewDidLoad 中将按钮单击绑定到视图模型。单击按钮时,我会打开另一个视图,在该视图中我需要将字符串返回到我的第一个视图
public override void ViewDidLoad ()
{
var set = this.CreateBindingSet<MyView1, MyView1ViewModel>();
set.Bind(myButton).To(vm => vm.MyButtonCommand);
set.Apply();
}
public ICommand MyButtonCommand
{
get
{
_myButtonCommand = _myButtonCommand ?? new MvxCommand(MyButtonCommandClick);
return _myButtonCommand;
}
}
private void MyButtonCommandClick()
{
ShowViewModel<ViewModelNumber2>();
}
在我的第二个视图中运行了一些逻辑后,我想返回字符串
private void SomeMethodInViewModelNumber2()
{
//Raise event that will get pickup up in MyView
//Or somehow get "SomeString"
if (OnMyResult != null)
OnMyResult ("SomeString");
}
问题是我不想使用信使发回字符串。我有我的理由,但基本上是因为 ViewModelNumber2 可以从许多不同的地方打开,并且工作方式略有不同,并且管理需要发回的不同消息以及在哪里订阅这些消息会一团糟
有什么方法可以做类似下面的事情吗?
public override void ViewDidLoad ()
{
var set = this.CreateBindingSet<MyView1, MyView1ViewModel>();
set.Bind(myButton).To(vm => vm.MyButtonCommand).OnMyResult((myString) => {Process(myString)});
set.Apply();
}
或者当我创建 ViewModelNumber2 时,我应该将一个 callBack 传递给构造函数并使用它将字符串从 ViewModelNumber2 发送回 MyView1ViewModel
ShowViewModel<ViewModelNumber2>(OnMyResult);
最好的方法是什么?
【问题讨论】:
-
我曾经工作过的一家主要的一级银行使用一个任务来包装新视图的逻辑来创造价值。考虑使用
TaskCompletionSource<Result>来结束在新视图中完成的工作。