MvvmCross - 使用参数Xamarin.iOS导航到ViewModel

时间:2016-12-14 12:27:41

标签: c# ios xamarin xamarin.ios mvvmcross

我希望能够在收到推送通知(因此应用程序最初没有运行)之后导航到ViewModel,同时向其发送一些参数。

我能够通过在AppDelegates“FinishedLaunching”中的推送通知中启动应用程序来显示特定的ViewModel,但我似乎无法弄清楚在哪里获取我正在尝试的参数发送。

[Register("AppDelegate")]
public partial class AppDelegate : MvxApplicationDelegate
{
    UIWindow _window;

    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {  
        // Some irrelevant initialization code here


        if (options != null)
        {
            if (options.ContainsKey(UIApplication.LaunchOptionsRemoteNotificationKey))
            {
                var viewDispatcher = Mvx.Resolve<IMvxViewDispatcher>();
                var request = MvxViewModelRequest.GetDefaultRequest(typeof(MyViewModel));
                request.ParameterValues = ((object)"someBooleanParameter").ToSimplePropertyDictionary();
                viewDispatcher.ShowViewModel(request);
            }
        }

        return true;
    }
}

我试图在Init方法的ViewModel中获取参数,但它似乎不起作用。

public class MyViewModel : MvxViewModel
{
    public void Init(string parameters)
    {
        if (parameters.Equals("someBooleanParameter"))
            // do something
    } 
}

1 个答案:

答案 0 :(得分:0)

您可以传入参数字典(键 propertyName 和值)。 https://github.com/MvvmCross/MvvmCross/blob/4.0/MvvmCross/Droid/Droid/Views/MvxChildViewModelOwnerExtensions.cs

在init方法中,属性将使用字典中的值填充。唯一的要求是可以在字典中找到init方法中的名称作为键。

所以来自VM的以下init方法。

void Init ( string name, string something else) { }

通过传入这本词典来填补:

new Dictionary<string, string> { 
       { "name", simpleRoute.Name }, 
       { "code",simpleRoute.Code} 
}

这只是其中一个选项..