Если вы создаете новый проект Windows Phone и используете Шаблон данных Windows Phone , у вас будет большая часть работы, выполненной за вас.
То, что вы хотите сделать, это настроитьViewModel, чтобы содержать все данные для вашего приложения.Вы можете сериализовать и десериализовать эти данные, используя IsolatedStorage, чтобы они сохранялись между сеансами приложения и при Tombstoning.
В шаблоне вы заметите MailViewModel и ItemViewModel .MainViewModel хранит все данные, в которых нуждается ваше приложение, включая ObservableCollection ItemViewModel, а ItemViewModel представляет отдельный тип данных для вашего приложения.
На странице DetailsPage.xaml вы хотите привязать DataBind каждого текстового поля к App.MainViewModelПредметы.Установите привязку к TwoWay, если вы хотите, чтобы ViewModel обновлялся, как только пользователь манипулирует данными в DetailsPage.xaml.При желании вы можете установить Binding на OneWay, а затем кнопку OK, которая записывает изменения обратно в ViewModel и сохраняет в IsolatedStorage.
Вот пример того, как выглядит Binding:
<TextBlock x:Name="ListTitle" Text="{Binding LineOne}" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
В этом случае LineOne является свойством ItemViewModel, и страница получает эти данные из строки запроса, когда пользователь выбирает элемент из MainPage.xaml.DataContext для страницы определяет, откуда берется информация о привязке данных.
Вот фрагмент, где MainPage передает выбранный элемент из ViewModel в DetailsPage.
// Handle selection changed on ListBox
private void MainListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// If selected index is -1 (no selection) do nothing
if (MainListBox.SelectedIndex == -1)
return;
// Navigate to the new page
NavigationService.Navigate(new Uri("/DetailsPage.xaml?selectedItem=" + MainListBox.SelectedIndex, UriKind.Relative));
// Reset selected index to -1 (no selection)
MainListBox.SelectedIndex = -1;
}
Вот какDetailsPage получает выбранный элемент.
protected override void OnNavigatedTo(NavigationEventArgs e)
{
string selectedIndex = "";
if (NavigationContext.QueryString.TryGetValue("selectedItem", out selectedIndex))
{
int index = int.Parse(selectedIndex);
DataContext = App.ViewModel.Items[index];
}
}
Поиграйте с шаблоном по умолчанию выше и задайте любые дополнительные вопросы.
Прелесть привязки данных и ObservableCollection заключается в том, что вы можете просто обновить данные иUX немедленно отразит эти изменения.Это связано с тем, что при любых изменениях данных происходит событие:
public string LineOne
{
get
{
return _lineOne;
}
set
{
if (value != _lineOne)
{
_lineOne = value;
NotifyPropertyChanged("LineOne");
}
}
}
NotifyPropertyChanged (), которое передает эту информацию в представление.