WPF MVVM Listview itemsource与类属性中的列表绑定

WPF MVVM Listview itemsource与类属性中的列表绑定,wpf,listview,binding,master,details,Wpf,Listview,Binding,Master,Details,我有一个包含两部分的页面: itemsource与类绑定的Listview,ObservableCollection“Patients”加载“Patient”类。 列表视图下是与selecteditem患者绑定的文本框。所有操作都可以在页面中运行,而无需在页面中写入任何代码,除非在选择中更改为滚动到所选项目 第二个列表视图必须显示所选“患者”的“就诊”详细信息 该应用程序在MVVM框架中工作,其中包含页面属性的Viewmodel 问题是如何建立两个ListView之间的关系。我尝试在Notify

我有一个包含两部分的页面: itemsource与类绑定的Listview,ObservableCollection“Patients”加载“Patient”类。 列表视图下是与selecteditem患者绑定的文本框。所有操作都可以在页面中运行,而无需在页面中写入任何代码,除非在选择中更改为滚动到所选项目

第二个列表视图必须显示所选“患者”的“就诊”详细信息

该应用程序在MVVM框架中工作,其中包含页面属性的Viewmodel

问题是如何建立两个ListView之间的关系。我尝试在NotifyPropertyChanged事件中首先构建第二个列表“Visites”:

            if (Patient.ID > 0)
            {
                LoadVisite(Patient.ID); // fill the details list "Visites"
                NotifyPropertyChanged("Visites");

            }
选择“患者”时,不显示delail

我尝试了另一种解决方案,在主类“Patient”中插入详细信息列表,如下所示:

    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 Name="ListeVisites" ItemsSource="{Binding Path=Patient.Visites}" SelectedItem="{Binding Visite}">
这是可行的,但是有没有另一个优雅的解决方案来绑定details Listview的itemsource? 谢谢你帮助我。
让-玛丽

我找到了解决问题的办法

未显示详细信息的原因是,用于listview的框架与主框架不通用。
我发现,当我显示详细信息框架时,“Patient”对象只包含null。我不知道为什么,但我阅读了有关共享ViewModel的内容,现在我在App.xaml中使用了一个通用的ViewModel,我不需要在代码中为详细信息列表视图指定itemsource。我将xaml itemsource={Binding Patient.Visites}一切正常。

我找到了解决问题的办法

未显示详细信息的原因是,用于listview的框架与主框架不通用。 我发现,当我显示详细信息框架时,“Patient”对象只包含null。我不知道为什么,但我阅读了有关共享ViewModel的内容,现在我在App.xaml中使用了一个通用的ViewModel,并且我不需要在代码中为详细信息列表视图指定itemsource。我将xaml itemsource={Binding Patient.Visites}放入其中,一切正常

    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; 

        }

    }