Параметры запуска Silverlight передаются в viewmodel - PullRequest
1 голос
/ 20 мая 2011

Я передаю URL моего веб-сервиса в мое приложение silverlight через параметры.

, когда мое приложение запускается, оно создает viewmodel для главной страницы до того, как сработало событие application_startup.

в моем конструкторе viewmodelУ меня есть вызов к моему сервисному агенту, чтобы загрузить некоторые данные из веб-сервиса, но URL-адрес веб-сервиса еще не инициализирован из-за того, что viewmodel создается до того, как будет вызвано событие application_startup.Какой лучший способ обойти это.Это вечер пятницы, и мой мозг, кажется, довольно жарен, пытаясь придумать хорошее решение.

Экземпляр 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();
    }

Приветствия

1 Ответ

1 голос
/ 23 мая 2011

, чтобы исправить мою проблему, мне пришлось удалить строку кода из конструктора viewmodellocator, который инициализировал MainViewModel

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