Silverlight启动参数传递给viewmodel

时间:2011-05-20 05:31:11

标签: silverlight mvvm-light

我通过参数将我的webservice url传递给我的silverlight应用程序。

当我的应用程序启动时,它会在激活application_startup事件之前为主页创建viewmodel。

在我的viewmodel构造函数中,我调用了我的serviceagent来从webservice加载一些数据,但由于在引发application_startup事件之前构造了viewmodel,因此webservice url尚未初始化。什么是解决这个问题的最好方法。这是一个星期五的晚上,我的大脑似乎非常油腻,试图想出一个好的解决方案。

在app.xaml

中创建ViewModelLocator的实例
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />

然后在ViewModelLocator构造函数中调用创建主页

    public ViewModelLocator()
    {
        CreateMain();
    }

    public static void CreateMain()
    {
        if (_main == null) _main = new MainViewModel();
    }

在我的MainViewModel中,我调用了我的serviceagent

    public MainViewModel() : this(new MyServiceAgent()) { }

    public MainViewModel(IMyServiceAgent myServiceAgent)
    {
        if (IsInDesignMode)
        {

        }
        else
        {

            ServiceAgent = myServiceAgent;         
            ServiceAgent.GetData();

            RegisterMessageListeners();
            WireUpCommands();
        }
    }

App.xaml.cs

    public App()
    {
        Startup += Application_Startup;
        Exit += Application_Exit;
        UnhandledException += Application_UnhandledException;

        InitializeComponent();
    }

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        if (e.InitParams != null && e.InitParams.Count > 0)
            ParseInitParams(e.InitParams);

        RootVisual = new MainPage();
        DispatcherHelper.Initialize();
    }

Cheeers

1 个答案:

答案 0 :(得分:1)

修复我的问题我必须从viewmodellocator构造函数中删除正在初始化MainViewModel的代码行

public ViewModelLocator()
{
    //CreateMain();
}