MVVM Light: Где я могу создать экземпляр класса из модели и как мне обновить / получить к нему доступ? - PullRequest
0 голосов
/ 31 января 2011

Сейчас я работаю над своим первым приложением WP7 и столкнулся с некоторыми вопросами, на которые я не смог ответить, несмотря на то, что прочитал, что я смог найти в Интернете. Пожалуйста, рассмотрите приложение, которое имеет главную страницу, страницу параметров и страницу результатов. На странице параметров пользователь может вводить или обновлять номера в различных текстовых полях. Нажатие кнопки «Назад» возвращает пользователя на главную страницу, где есть кнопка «Рассчитать». Нажатие на эту кнопку должно привести к получению данных, выполнить с ними вычисления и перенести пользователя на страницу результатов, представляющую сетку с результатами.

В файле Calculator.cs у меня есть класс Calculator внутри папки с названием Models. У меня также есть файлы MainViewModel.cs, ParametersViewModel.cs и ResultsViewModel.cs в папке ViewModels и соответствующий файл MainPage.xaml вместе с Parameters.xaml и Results.xaml в папке с именем Views. Я предполагаю, что все данные будут обрабатываться в экземпляре класса Calculator, а затем набор результатов будет возвращен и направлен в Results.xaml. Я просто в растерянности относительно того, где создать экземпляр класса Calculator, передать ему данные, а затем получить результаты. Я также несколько озадачен тем, как я буду запускать автоматическую навигацию на странице результатов после завершения расчета.

Любая помощь с этим будет принята с благодарностью.

ОБНОВЛЕНИЕ: Передача сложного объекта на страницу при навигации в приложении WP7 Silverlight содержит дополнительную информацию на эту тему. Я могу зайти в App.xaml.cs и добавить что-то вроде этого:

public class Foobar
{
    public string barfoo = "hah!";
}

public static Foobar myfoob = new Foobar();

Затем получите доступ к нему со страницы ViewModel, например, AboutViewModel.cs, вот так:

public AboutViewModel()
{
    string goo = App.myfoob.barfoo;
}

Но на данный момент я все еще не уверен, какие непредвиденные эффекты могут иметь. На этом этапе я собираюсь заняться сериализацией / захоронением, чтобы увидеть, что происходит с этим подходом или с использованием одного и того же DataContext на разных страницах. В противном случае один из постеров в указанной выше ссылке сериализует параметры и передает их между страницами. Моя проблема заключается в том, существует ли ограничение по количеству символов, как при использовании HTTP GET. Кажется, есть: Пределы URI в Silverlight

1 Ответ

1 голос
/ 31 января 2011

Конечно, существует множество возможных дизайнов, и многие из них правильны по-разному!

Вот один, который я мог бы использовать:

  • Нажатие кнопки «Рассчитать» должно вызвать переход на страницу результатов.
  • При переходе на страницу результатов должна отображаться анимация (возможно, просто индикатор выполнения)
  • При переходе на страницу результатов следует создать новую ResultsViewModel, передав в качестве параметров MainViewModel
  • конструктор (или некоторый метод init) ResultsViewModel должен запустить поток, чтобы выполнить вычисление
  • когда этот расчет будет завершен, соответствующие свойства ResultsViewModel будут установлены
  • В этот момент привязка данных на странице результатов очистит анимацию и покажет результаты

Определенно доступны и другие решения - будет интересно почитать, что другие люди предлагают и предпочитают.

Кроме того, на вашей странице результатов стоит обратить внимание на надгробие - это может быть интересным испытанием!

...