2012-05-02 2 views
0

Я создал приложение, которое подключается к базе данных SDF. Пользователю предоставляется список фильмов в кинотеатре. Пользователь может выбрать фильм и нажать кнопку «ОК».Как передать значения из базы данных между страницами в WPF?

Пользователь должен затем представить другой файл данных, содержащий всю информацию этого фильма.

Я пробовал передать SelectedIndex между двумя страницами, он отправляет SelectedIndex на информационную страницу, но он не будет присваивать его тому же SelectedIndex.

public Desc(int input_id) 
    { 
     InitializeComponent(); 


     cinemaEntities = new cinema1.cinemaDBEntities(); 
     movieViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("moviesViewSource"))); 

     System.Data.Objects.ObjectQuery<cinema1.movie> moviesQuery = this.GetMovieQuery(cinemaEntities); 

     movieViewSource.Source = moviesQuery.Execute(System.Data.Objects.MergeOption.OverwriteChanges); 
     moviesListView.SelectedIndex = id; 

ответ

0

Я бы использовал шаблон, подобный MVVM, и фреймворк, такой как MVVM light для передачи данных между видами. Вот отличный учебник.

http://www.youtube.com/watch?v=s-goeb2u3oA&safety_mode=true&persist_safety_mode=1&safe=active

+0

Хм, со временем ограничены, обе страницы сделаны, но я не могу получить одну и ту же строку, выбранную на каждой странице. Я думаю, что это просто заказ SelectedIndex. –

+0

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

0

Что делать, зависит от цели программного обеспечения, но в любом случае я бы рекомендовал, чтобы потратить немного больше усилий на архитектуру вашего программного обеспечения. Поскольку вы хотите использовать WPF, вы должны решить, следует ли использовать подход MVVM (Model-View-ViewModel), который обладает высокой степенью поддержки и имеет множество преимуществ, но требует некоторого времени, чтобы ознакомиться с ним. Быстрое решение, которое абсурдно прекрасно подходит для небольших или простых приложений, - это кодирование вашей логики GUI в коде ваших взглядов и элементов управления.

В любом случае, я бы создал слой модели, который отражает данные вашей базы данных в соответствии с типами (у MovieDatabase есть коллекция фильмов и т. Д.). Затем напишите адаптер, чтобы заполнить модель из базы данных. Затем используйте модель в своих представлениях - если вы хотите сделать это быстро - или напишите ViewModels в свои модели (что лучше) и используйте их в своих представлениях.

Это, как говорится, из кода, который вы опубликовали, трудно сказать, в чем проблема. У вас есть немного больше контекста? Почему бы вам не передать SelectedItem?

+0

Ну, у меня одинаковый код на обеих страницах, я понимаю, что это очень непрактично, но это короткое задание. Я просто хотел, чтобы выбор сохранялся между двумя страницами. Кажется, что SelectedIndex сохраняет номер строки текущего выбранного ListView. Поэтому я хотел, чтобы следующая страница автоматически отображала детали для одного и того же списка. –

+0

Если ваш ListView содержит данные и вы устанавливаете SelectedIndex, элемент выбирается. Отлаживайте и посмотрите, правильно ли указатель, который вы пытаетесь установить, (почему вы устанавливаете id, когда имя параметра - input_id?), И ваш ListView содержит данные. После того, как вы установили SelectedIndex, посмотрите, является ли свойство SelectedItem вашего ListView правильным элементом. Если да, это может измениться в другом месте. – Marc

0

Почему бы просто не передать объект фильма на вторую страницу? И затем используйте .SelectedItem. Почему второй странице нужен весь список в любом случае, если он детализирован только для одного фильма?