WPF MVVM Привязка источника элементов списка просмотра со списком в свойстве класса - PullRequest
1 голос
/ 01 февраля 2020

У меня есть страница, состоящая из двух частей: 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

1 Ответ

0 голосов
/ 03 февраля 2020

Я нашел решение своей проблемы.

Причина, по которой детали не отображались, заключается в том, что кадр, используемый для просмотра списка, не является общим с главным кадром. Я обнаружил, что при отображении фрейма сведений объект «Пациент» содержит только ноль. Я не знаю почему, но я прочитал о совместном использовании ViewModel, и теперь я использую общий в App.xaml, и мне не нужно указывать источник данных для деталей Listview в коде. Я вставил в XAML itemsource = {Binding Patient.Visites} и все работает.

...