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
爲什麼你就不能移動的,其中的代碼行viewmodellocator被初始化爲application_startup?通常使用mvvmlight,這在application_startup上調用:DispatcherHelper.Initialize();此外,viewmodel定位器的工作原理是,一旦viewmodel屬性第一次被調用,並且沒有現成的屬性,它將創建它,並且這隻會在窗口初始化時調用。 – 2011-05-20 05:49:33
您是否說過構造函數ViewModel在Application.Startup之前調用?我一直在試圖重現這種情況,我的Startup總是在ViewModel初始化之前被調用(畢竟,在創建你要顯示的視圖的實例的Startup處理程序中)你能提供關於你的設置/場景? – Ando 2011-05-20 05:51:04
它幾乎是直接開箱的mvvm光工具包..我附上上面的代碼.. – BBurke 2011-05-20 06:23:36