2011-05-20 72 views
1

即時通過我的webservice url傳遞給我的silverlight應用程序通過參數。Silverlight啓動參數傳遞給viewmodel

當我的應用程序啓動時,它會在觸發application_startup事件之前爲mainpage創建viewmodel。

在我的viewmodel構造函數我有一個調用我的serviceagent從web服務加載一些數據,但webservice url尚未初始化,因爲在引發application_startup事件之前構造了viewmodel。什麼是解決這個問題的最好方法。這是一個星期五的晚上,我的大腦似乎很想嘗試想出一個好的解決方案。

的ViewModelLocator的一個實例在App.xaml中創建

<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" /> 

然後在ViewModelLocator構造有一個叫創建主頁

public ViewModelLocator() 
    { 
     CreateMain(); 
    } 

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

,並在我的MainViewModel我做致電我的代理商

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

+0

爲什麼你就不能移動的,其中的代碼行viewmodellocator被初始化爲application_startup?通常使用mvvmlight,這在application_startup上調用:DispatcherHelper.Initialize();此外,viewmodel定位器的工作原理是,一旦viewmodel屬性第一次被調用,並且沒有現成的屬性,它將創建它,並且這隻會在窗口初始化時調用。 – 2011-05-20 05:49:33

+0

您是否說過構造函數ViewModel在Application.Startup之前調用?我一直在試圖重現這種情況,我的Startup總是在ViewModel初始化之前被調用(畢竟,在創建你要顯示的視圖的實例的Startup處理程序中)你能提供關於你的設置/場景? – Ando 2011-05-20 05:51:04

+0

它幾乎是直接開箱的mvvm光工具包..我附上上面的代碼.. – BBurke 2011-05-20 06:23:36

回答

1

來解決我的問題,我不得不刪除從viewmodellocator構造函數代碼被初始化的MainViewModel

public ViewModelLocator() 
{ 
    //CreateMain(); 
} 
相關問題