我一直在开发Windows Forms应用程序,并且是使用MVVMLight Toolkit和WPF的新手。
我的模型如下:
标识, 名字, 姓, 等...
标识,
得分了,
日期,
PatientId,
等...
每位患者可以有多个TestResults。在同一个视图(名为GTPView)上,我想显示一个患者列表框和一个TestResults列表框。当用户点击患者时,所有患者的TestResults都应出现在TestResults列表框中。
我知道如何将Patient ListBox的SelectedItem绑定到来自我的GTPViewModel的Patient属性,但是如何将TestResults ListBox绑定到当前所选患者的所有TestResults?
我是否应该拥有TestResults列表框的UserControl视图和患者列表框的UserControl视图,然后将这些UserControl添加到我的GTPView?或者最好只在一个视图上完成所有操作?
提前致谢。如果您需要更多信息,请与我们联系。这是我的GTPView的XAML:
<Window x:Class="ApuntaNotas.Views.GTPView"
Title="GTP"
DataContext="{Binding GTP, Source={StaticResource Locator}}"
d:DataContext="{d:DesignData /SampleData/PatientsViewModelSampleData.xaml}">
<Window.Resources>
<CollectionViewSource Source="{Binding Patients}" x:Key="PatientsVS">
<CollectionViewSource.SortDescriptions>
<ComponentModel:SortDescription PropertyName="Name" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Window.Resources>
<DockPanel>
<ListBox DockPanel.Dock="Left" ItemsSource="{Binding Source={StaticResource PatientsVS}}"
x:Name="listBoxPatients" SelectedItem="{Binding SelectedPatient}" DataContext="{Binding}"
DisplayMemberPath="">
</ListBox>
<ListBox DockPanel.Dock="Right" ItemsSource="{Binding Source={StaticResource PatientsVS}}"
x:Name="listBoxTestResults" DataContext="{Binding}"
DisplayMemberPath="">
</ListBox>
</DockPanel>
</Window>
答案 0 :(得分:5)
您的PatientViewModel
应该是这样的
public class PatientViewModel: INotifyPropertyChanged
{
public int ID {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
//Each patient has a set of test results, so we create a list.
public List<TestResult> PatientTestResults {get; set;}
}
你应该再增加一个包含PatientViewModel
集合的课程。
public class AllPatients
{
public ObservableCollection<PatientViewModel> AllPatients{get; set;}
public PatientViewModel SelectedPatient {get; set;}
}
您的Window类现在应该如下所示
<ListBox x:Name="listBoxPatients"
ItemsSource="{Binding AllPatients}"
SelectedItem="{Binding SelectedPatient}"
IsSynchronizedWithCurrentItem="True"/>
<ListBox x:Name="listBoxTestResults"
ItemsSource="{Binding SelectedPatient.TestResults}"
IsSynchronizedWithCurrentItem="True"/>