У меня есть страница с двумя частями: Listview с источником элементов, привязанным к классу ObservableCollection «Пациенты», загруженным с классом «Пациент». Под списком находятся текстовые поля, привязанные к выбранному пациенту. Все работает без написания кода на странице, кроме selection_changed для прокрутки к выбранному элементу.
Второй просмотр списка должен отображать подробности «Посещения» от выбранного «Пациента».
Приложение работает в MVVM Framework с моделью просмотра, содержащей свойства страницы.
Проблема в том, чтобы установить связь между двумя ListView. Я попробовал сначала создать второй список «Посещения» в событии NotifyPropertyChanged:
if (Patient.ID > 0)
{
LoadVisite(Patient.ID); // fill the details list "Visites"
NotifyPropertyChanged("Visites");
}
При выборе «Пациент» задержка не отображается.
Я попробовал другое решение, вставив список деталей в мастер-класс «Пациент вот так:
public Class Patient
...
public ObservableCollection<ClsVisite> Visites
{
get
{
return _visites;
}
set
{
_visites = value;
}
}
// WDABase class to open the database and load data connection
WDABase wd = new WDABase();
wd.LoadListeVisites(ID, _visites); //ID is the relation beween the two tables
}
}
Теперь я пытаюсь создать источник деталей Listview в XAML следующим образом:
<ListView Name="ListeVisites" ItemsSource="{Binding Path=Patient.Visites}" SelectedItem="{Binding Visite}">
Никаких подробностей не показано.
Уникальное решение, которое я нашел, заключалось в том, чтобы добавить некоторый код в событие selection_changed главного Listview, как это (в этом случае списки находятся в двух разных фреймах):
private void ListePatients_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
ListePatients.ScrollIntoView(ListePatients.SelectedItem);
if(ListePatients.SelectedItem != null)
{
var w1 = ((System.Windows.FrameworkElement)App.Current.MainWindow.Content).Parent;
Frame pageVisite = (w1 as MainWindow).Visit;
var w2 = (System.Windows.FrameworkElement)pageVisite.Content;
ListView Lv = (w2 as Visite).ListeVisites;
Lv.ItemsSource = (ListePatients.SelectedItem as ClsPatient).Visites;
}
}
И это работает, но есть ли еще одно элегантное решение для привязки источника элементов к списку деталей? Спасибо за помощь. Жан-Мари