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