为什么 TreeView 不显示子项
Why isn't the TreeView showing the Children
我正在用 .Net 核心 (C#) 编写程序,它使用 EF 核心访问 SQLite 数据库。
namespace BtmManager.Models
{
public class Projekt
{
[Key]
public int ProjektId { set; get; }
[Required]
public int BtmBestandsbuchNr { get; set; }
[Required]
public int Stufenanzahl { get; set; }
public string Produktbezeichnung { get; set; }
[Required]
public int ProduktNr { get; set; }
public DateTime Zeitraum { get; set; }
public IList<Stufe> Stufen { get; set; }
}
public class Stufe
{
[Key]
public int StufId { set; get; }
[Required]
public int StufenNummer { get; set; }
public string MaterialName { get; set; }
[Required]
public int AnzahlEinträge { get; set; }
public int ProjektId { get; set; }
public Projekt Projekte { get; set; }
public IList<Eintrag> Einträge { get; set; }
}
public class Eintrag
{
[Key]
public int EintragId { set; get; }
[Required]
public byte Einheit { get; set; }
public string LfdNr { get; set; }
public DateTime Datum { get; set; }
public float Anfangsbestand { get; set; }
public float TheroZugang { get; set; }
public float PrakZugang { get; set; }
public float Arbeitsverlust { get; set; }
public float Abgang { get; set; }
public float AktuellerBestand { get; set; }
public string Bemerkung { get; set; }
public int StufId { get; set; }
public Stufe Stufen { get; set; }
}
}
我输入了一些测试值
ProjektId BtmBestandsbuchNr Stufenanzahl Produktbezeichnung
1 jnjnijni 2 khih
2 phgztf 1 wdfw
3 yawesxdr 2 ewg
StufId StufenNummer MaterialName AnzahlEinträge ProjektId
1 1 nvjgh 3 1
2 2 jljk 3 1
层次结构是:
- 项目(项目)
- 斯图芬(舞台)
- Eintrag(条目)
我现在的目标是在 TreeView 中显示 WPF 中的层次结构。
<TreeView x:Name="TreeView" Margin="5,0,5,0" Grid.Row="1" Grid.RowSpan="7" ItemsSource="{Binding}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type self:Projekt}" ItemsSource="{Binding Stufen}">
<TextBlock Text="{Binding Path=Produktbezeichnung}" />
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type self:Stufe}">
<TextBlock Text="{Binding Path=MaterialName}" />
</DataTemplate>
</TreeView.Resources>
</TreeView>
如您所见,项目显示正确,但没有子项!
有什么想法吗??
如果您需要查看完整代码,我已将其上传至 GitHub
查看源代码。
问题是由 entity framework 的默认行为引起的。
默认情况下,相关实体是惰性(而不是急切)加载的。
如果您 select 一个实体,它的相关 children 不会被阅读。
您需要包括相关的 children - 在本例中是您的 Stufen。
有两种方法可以做到这一点
How to include() nested child entity in linq
如果我正确地遵循了您的实体名称:
.Include("Stufen").ToList();
我正在用 .Net 核心 (C#) 编写程序,它使用 EF 核心访问 SQLite 数据库。
namespace BtmManager.Models
{
public class Projekt
{
[Key]
public int ProjektId { set; get; }
[Required]
public int BtmBestandsbuchNr { get; set; }
[Required]
public int Stufenanzahl { get; set; }
public string Produktbezeichnung { get; set; }
[Required]
public int ProduktNr { get; set; }
public DateTime Zeitraum { get; set; }
public IList<Stufe> Stufen { get; set; }
}
public class Stufe
{
[Key]
public int StufId { set; get; }
[Required]
public int StufenNummer { get; set; }
public string MaterialName { get; set; }
[Required]
public int AnzahlEinträge { get; set; }
public int ProjektId { get; set; }
public Projekt Projekte { get; set; }
public IList<Eintrag> Einträge { get; set; }
}
public class Eintrag
{
[Key]
public int EintragId { set; get; }
[Required]
public byte Einheit { get; set; }
public string LfdNr { get; set; }
public DateTime Datum { get; set; }
public float Anfangsbestand { get; set; }
public float TheroZugang { get; set; }
public float PrakZugang { get; set; }
public float Arbeitsverlust { get; set; }
public float Abgang { get; set; }
public float AktuellerBestand { get; set; }
public string Bemerkung { get; set; }
public int StufId { get; set; }
public Stufe Stufen { get; set; }
}
}
我输入了一些测试值
ProjektId BtmBestandsbuchNr Stufenanzahl Produktbezeichnung
1 jnjnijni 2 khih
2 phgztf 1 wdfw
3 yawesxdr 2 ewg
StufId StufenNummer MaterialName AnzahlEinträge ProjektId
1 1 nvjgh 3 1
2 2 jljk 3 1
层次结构是:
- 项目(项目)
- 斯图芬(舞台)
- Eintrag(条目)
- 斯图芬(舞台)
我现在的目标是在 TreeView 中显示 WPF 中的层次结构。
<TreeView x:Name="TreeView" Margin="5,0,5,0" Grid.Row="1" Grid.RowSpan="7" ItemsSource="{Binding}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type self:Projekt}" ItemsSource="{Binding Stufen}">
<TextBlock Text="{Binding Path=Produktbezeichnung}" />
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type self:Stufe}">
<TextBlock Text="{Binding Path=MaterialName}" />
</DataTemplate>
</TreeView.Resources>
</TreeView>
如您所见,项目显示正确,但没有子项! 有什么想法吗??
如果您需要查看完整代码,我已将其上传至 GitHub
查看源代码。
问题是由 entity framework 的默认行为引起的。
默认情况下,相关实体是惰性(而不是急切)加载的。
如果您 select 一个实体,它的相关 children 不会被阅读。
您需要包括相关的 children - 在本例中是您的 Stufen。
有两种方法可以做到这一点
How to include() nested child entity in linq
如果我正确地遵循了您的实体名称:
.Include("Stufen").ToList();