[英]How to Bind a One To Many Relation in C# MVVM
我一直在開發Windows Forms應用程序,並且是使用MVVMLight Toolkit和WPF的新手。
我的模型如下:
Id,FirstName,LastName等...
ID,分數,日期,
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>
您的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
集合的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"/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.