У меня есть страница, состоящая из двух частей: Listview с источником элементов, связанным с классом, ObservableCollection "Patients", загруженным с классом "Patient". Под списком просмотра находятся текстовые поля, связанные с выбранным элементом Patient. Все работает без написания какого-либо кода на странице, кроме в selection_changed для прокрутки к выбранному элементу.
Второй просмотр списка должен отображать детали «Посещения» от выбранного «Пациента».
Приложение работает в MVVM Framework с Viewmodel, содержащим свойства для страницы.
Проблема состоит в том, чтобы установить связь между двумя ListView. Я попытался сначала создать второй список «Посещения» в событии NotifyPropertyChanged:
if (Patient.ID > 0)
{
LoadVisite(Patient.ID); // fill the details list "Visites"
NotifyPropertyChanged("Visites");
}
При выборе «Пациент» не отображается delail.
Я пробовал другое решение, вставив список сведений в мастер-классе "Пациент, подобный этому:
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;
}
}
И это работает, но работает Есть еще одно элегантное решение для привязки элементов к деталям Listview? Спасибо за помощь. Жан-Мар ie