我通过参数将我的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
答案 0 :(得分:1)
修复我的问题我必须从viewmodellocator构造函数中删除正在初始化MainViewModel的代码行
public ViewModelLocator()
{
//CreateMain();
}