2014-01-08 3 views
0

Я новичок в разработке приложений для магазина Windows, и в настоящее время я разрабатываю новостное приложение, и я хочу обновить страницу, чтобы обновлять новости. Я заявил, что разрабатывает макет по умолчанию, который предоставляется нам при запуске проекта, и я теряюсь со страничным словарем, потому что, как только страница будет создана. Он получает сохранение, так что есть способ обновить страницу !!! Метод LoadState вызывается, когда приложение запускается в первый раз при щелчке по обновлению, но все данные сохраняются в словаре, согласно моим знаниям, есть простой способ очистить данные внутри групп и вызвать методы, чтобы новые данные будут заполняться in.can какой-то один, пожалуйста, руководство меня с соответствующими шагамиОбновление страницы приложения для магазина Windows

protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState) 
    { 
     var sampleDataGroups = SampleDataSource.GetGroups((String)navigationParameter); 
     this.DefaultViewModel["Groups"] = sampleDataGroups; 
    } 

    private void refresh(object sender, RoutedEventArgs e) 
    { 
     this.DefaultViewModel.Clear(); 

    } 

ответ

0

Как насчет:

private string parameter; 

protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState) 
{ 
    parameter = (string)navigationParameter; 
    reloadData(); 
} 

private void reloadData() 
{ 
    var sampleDataGroups = SampleDataSource.GetGroups(parameter); 
    this.DefaultViewModel["Groups"] = sampleDataGroups; 
} 

private void refresh(object sender, RoutedEventArgs e) 
{ 
    reloadData() 
} 
+0

Я хочу обновить данные в группах данных, данные взяты из jason, и я создал список со стороны списка, в котором хранятся данные, как указано ниже, пример кода – user2955262

+0

group2.Items.Add (новый SampleDataItem («LatestNewsSmall-Group -2-Item-1 ", news.TopNewsGivenCat [0] .title.ToString(). Заменить (@" \ "," - "), time (news.TopNewsGivenCat [0] .lastUpdated.ToString()) , проверкаimage (новости.TopNewsGivenCat [0] .image.ToString()), news.TopNewsGivenCat [0] .contents.ToString(), news.TopNewsGivenCat [0] .contents.ToString() Заменить (@ "\", "-"), 50, 50, group2)); – user2955262

+0

делают это при перезагрузке данных вместо загрузки страницы. – Bas

2

Там нет отличного ответа на этот вопрос. Но позвольте мне рассказать вам некоторые понятия. Конечно, нет обновления, и причина этого много раз. Обновление может быть добавлено в Frame когда-нибудь, но сейчас это проблематично.

Рассмотрим навигационной службы

Хороший способ навигации в вашем приложении, чтобы разгрузить эту работу к классу NavigationService. Это простой класс, который имеет (что-то вроде) настраиваемые методы GotoAppHub() и GotoItemDetail(Item).

Целью этих методов является не то, что навигация сложна, а потому, что навигация может быть централизована. Он может проверить & создать Frame; а не оставлять это ошибочно в App.xaml.cs.

Если ваша модель просмотра хочет перейти на страницу, она просто вызывает NavigationService.GotoItemDetail(item);, чтобы сделать это, передавая элемент. Это разумно по нескольким причинам, позвольте мне поговорить с вами через них.

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

Вторая причина, по которой это разумно, позволяет сохранить параметр, переданный в запрос навигации. Помните, что Frame НЕ сериализует настраиваемые, сложные типы. В результате передача item в этом случае является плохой практикой. Навигационная служба может сохранить этот параметр где-нибудь, чтобы модель целевого представления могла ее поднять. Более того, он может сохраняться для вашего Refresh().

Рассмотрим статический класс Repository

Когда вид модели загружен, он должен быть необходимым для того, чтобы знать, что предыдущий вид модели, приводившая к загрузке. Вместо этого модель представления должна знать, что она должна делать. И для выполнения своей работы необходимы данные. Каждая модель представления может использовать класс репозитория для запроса «текущей» записи. Эта текущая запись будет установлена ​​навигационной службой при наступлении навигации. Кроме того, класс репозитория знает, что делать, когда нет текущей записи, и при необходимости она извлекает ее.

В дополнение к содержанию ссылки на текущую запись класс репозитория также понимает упорство. Я имею в виду, когда приложение загружается, оно знает, как заполнять списки. Когда приложение приостановлено, он знает, как сохранить данные в файл или веб-службу или что-то еще, что вы используете.В результате модель представления не знает этого и, как результат, упрощается и упрощается.

Рассмотрим метод

Он находится в навигационном обслуживании, где вам нужно метод перезагрузки Reload(). Более того, только в навигационной службе, где метод перезагрузки может быть наиболее эффективным, поскольку навигационная служба знает текущий type и текущее значение параметра. Служба навигации может сохранять эти значения в локальных полях, а метод перезагрузки может просто повторить навигацию.

Помните заднюю стек, однако. Это похоже на навигацию браузера, и повторение навигации означает, что одна и та же страница будет существовать дважды, а метод GoBack(), который вы также используете в навигационной службе, не вернется, пока вы не вернетесь дважды. Решение прост, просто не забудьте удалить с помощью Services.NavigationService.Instance.Frame.BackStack.Remove().

Помните стоимость погрузки

Иногда при загрузке страницы есть значительные расходы при загрузке пользовательского интерфейса. Это потому, что все, что вы делаете, не тривиально. Вызов функции Reload() приведет к повторной загрузке страницы. Это цена, которую вы просто не можете преодолеть. Но могут быть зависимости от загрузки страницы, которая должна быть обойдена. Например, вы можете инициировать операцию веб-службы при загрузке страницы - и эту операцию не следует повторять. Это зависит от вас, чтобы сохранить статическое булево значение, указывающее, что страница уже загружена. Но важно, чтобы вы этого не забыли. более

Одним из преимуществ хранилища

Несколько абзацев выше я упомянул, что навигационная услуга является тот, который может вспомнить последний переданный параметр для метода перезагрузки работать. Если у вас есть внутреннее правило, которое может использовать только служба навигации для класса параллелизма, вам не нужно помнить о том, что ваша служба навигации не должна помнить. Он просто должен помнить последний навигационный тип. Это связано с тем, что класс параллелизма уже имеет ссылку на переданный элемент. Это, однако, не всегда полезно. Иногда перезагрузка вызывается для удаления текущих изменений, что означает, что текущий элемент необходимо перезагрузить или текущие изменения должны быть сброшены. Это все должно быть обычаем, но мне было бы плохо, если бы я не упомянул об этом.

Заключение

Это должно быть принято только в качестве рекомендации. Сказав это, я описал здесь большую часть крупных, успешных приложений WPF и Windows на рынке. Использование шаблона MVVP, шаблона службы для навигации, шаблона репозитория для параллелизма - все это довольно хорошо доказано. Но вы разработчик. В конце концов, вы должны выбрать, что лучше.

Если вам не нравится какой-либо из этого, вы можете сделать это:

public bool Reload() 
{ 
    if (!this.Frame.BackStack.Any()) 
     return false; 
    var current = this.Frame.BackStack.First(); 
    this.Frame.BackStack.Remove(current); 
    return this.Frame.Navigate(current.SourcePageType, current.Parameter); 
} 

удачи!

Смежные вопросы