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