【发布时间】:2013-12-09 09:43:32
【问题描述】:
我有一个数据网格。它绑定到患者的集合。
现在我想在选择更改时展开它,以便我可以看到患者的详细信息。
这是我的 xaml:
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Patients}"
SelectedIndex="{Binding SelectedID}" RowDetailsVisibilityMode="VisibleWhenSelected"
IsReadOnly="True" SelectionMode="Single" SelectionUnit="FullRow" >
<DataGrid.Resources>
<Style x:Key="VerticalCenter" TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center"></Setter>
</Style>
<Style x:Key="VerticalAndHorizontalCenter" TargetType="FrameworkElement" >
<Setter Property="VerticalAlignment" Value="Center"></Setter>
<Setter Property="HorizontalAlignment" Value="Center"></Setter>
</Style>
<Style x:Key="VerticalAndHorizontalCenterTextBlock" TargetType="TextBlock"
BasedOn="{StaticResource VerticalAndHorizontalCenter}"/>
<Style x:Key="VerticalAndHorizontalCenterHeader" TargetType="{x:Type DataGridColumnHeader}"
BasedOn="{StaticResource VerticalAndHorizontalCenter}"/>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding PatientName}" Header="Patient Name" Width="25*"
ElementStyle="{StaticResource VerticalCenter}"/>
<DataGridTextColumn Binding="{Binding City}" Header="City" Width="15*"
ElementStyle="{StaticResource VerticalAndHorizontalCenterTextBlock}"
HeaderStyle="{StaticResource VerticalAndHorizontalCenterHeader}"/>
<DataGridTextColumn Binding="{Binding Sex}" Header="Sex" Width="10*"
ElementStyle="{StaticResource VerticalAndHorizontalCenterTextBlock}"
HeaderStyle="{StaticResource VerticalAndHorizontalCenterHeader}"/>
<DataGridTextColumn Binding="{Binding Age}" Header="Age" Width="5*"
ElementStyle="{StaticResource VerticalAndHorizontalCenterTextBlock}"
HeaderStyle="{StaticResource VerticalAndHorizontalCenterHeader}"/>
<DataGridTemplateColumn Header="Delete">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="Images/Delete.png" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<DataGrid AutoGenerateColumns="False" IsReadOnly="True" ItemsSource="{Binding ReportNames}">
<DataGridTextColumn Binding="{Binding ReportNames}" Header="Report Name" />
<!--<DataGridTextColumn Binding="{Binding DateOfReport}" Header="Date" />-->
<DataGridTemplateColumn Header="Delete">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="Images/Delete.png" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
这是我的 ViewModel:
class MainWindowViewModel : INotifyPropertyChanged
{
public MainWindowViewModel()
{
using (Lab_Lite_Entities db = new Lab_Lite_Entities())
{
ReportNames = new List<string>();
}
}
private IEnumerable<Patient> _patients;
public IEnumerable<Patient> Patients
{
get
{
return _patients;
}
set
{
_patients = value;
OnPropertyChanged("Patients");
}
}
private List<string> _reportNames;
public List<string> ReportNames
{
get
{
return _reportNames;
}
set
{
_reportNames = value;
OnPropertyChanged("ReportNames");
}
}
private int _selectedID;
public int SelectedID
{
get
{
return _selectedID;
}
set
{
_selectedID = value;
OnPropertyChanged("SelectedID");
using (Lab_Lite_Entities db = new Lab_Lite_Entities())
{
if (SelectedID > -1)
{
ReportNames.Clear();
if ((from p in db.Patients select p).Where(p => p.PatientID == SelectedID + 1).Select(p => p.Haemograms.Count()).FirstOrDefault() > 0)
{
ReportNames.Add("Haemogram Report");
}
if ((from p in db.Patients select p).Where(p => p.PatientID == SelectedID + 1).Select(p => p.UrineAnalysis.Count()).FirstOrDefault() > 0)
{
ReportNames.Add("Urine Analysis");
}
if ((from p in db.Patients select p).Where(p => p.PatientID == SelectedID + 1).Select(p => p.BloodChemistries.Count()).FirstOrDefault() > 0)
{
ReportNames.Add("Blood Chemistry");
}
if ((from p in db.Patients select p).Where(p => p.PatientID == SelectedID + 1).Select(p => p.WidalTests.Count()).FirstOrDefault() > 0)
{
ReportNames.Add("Widal Test");
}
if ((from p in db.Patients select p).Where(p => p.PatientID == SelectedID + 1).Select(p => p.SerologicalTests.Count()).FirstOrDefault() > 0)
{
ReportNames.Add("Serological Test");
}
if ((from p in db.Patients select p).Where(p => p.PatientID == SelectedID + 1).Select(p => p.DengueTests.Count()).FirstOrDefault() > 0)
{
ReportNames.Add("Dengue (Immunological Test)");
}
if ((from p in db.Patients select p).Where(p => p.PatientID == SelectedID + 1).Select(p => p.HIVTests.Count()).FirstOrDefault() > 0)
{
ReportNames.Add("HIV (Immunological Test)");
}
if ((from p in db.Patients select p).Where(p => p.PatientID == SelectedID + 1).Select(p => p.Troponin1Test.Count()).FirstOrDefault() > 0)
{
ReportNames.Add("Troponion-I Test");
}
if ((from p in db.Patients select p).Where(p => p.PatientID == SelectedID + 1).Select(p => p.UrinaryPregnancyCardTests.Count()).FirstOrDefault() > 0)
{
ReportNames.Add("Pregnancy Card Test");
}
if ((from p in db.Patients select p).Where(p => p.PatientID == SelectedID + 1).Select(p => p.HepatitisBSurfaceAntigenTests.Count()).FirstOrDefault() > 0)
{
ReportNames.Add("HBS Antigen Test");
}
}
}
}
}
}
这是我的输出:
从上图中可以看出,我没有正确获取详细信息。
我怀疑我在绑定内部数据网格时犯了一些错误,但我不知道如何纠正它。请给我一些解决方案。
【问题讨论】:
标签: c# wpf silverlight xaml mvvm