使用NHibernate进行WPF TreeView和延迟加载数据绑定时需要提供建议
我正在做一个项目,我需要向用户提供一些TreeView。到目前为止,我已经设法使我的业务对象及其对数据库的持久性完全发挥作用 我使用NHibernate和SQLite3来存储对象。业务对象如下所示:使用NHibernate进行WPF TreeView和延迟加载数据绑定时需要提供建议,wpf,nhibernate,data-binding,treeview,Wpf,Nhibernate,Data Binding,Treeview,我正在做一个项目,我需要向用户提供一些TreeView。到目前为止,我已经设法使我的业务对象及其对数据库的持久性完全发挥作用 我使用NHibernate和SQLite3来存储对象。业务对象如下所示: public class ErrorObject { public virtual int ID { get; set; } public virtual string Description { get; set; } private IList<ErrorObje
public class ErrorObject
{
public virtual int ID { get; set; }
public virtual string Description { get; set; }
private IList<ErrorObject> _errorObjects = new List<ErrorObject>();
public virtual IList<ErrorObject> ErrorObjects
{
get { return _errorObjects; }
set { _errorObjects = value; }
}
}
我把它绑定到一个树状视图上,就像这样:
<TreeView ItemsSource="{Binding ErrorObjects}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type DataModel:ErrorObject}"
ItemsSource="{Binding ErrorObjects}">
<TextBlock Text="{Binding Path=Description}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
让我困惑的是,只要我不关闭NHibernate会话,我就有完整的延迟加载开箱即用:o
如果这是继续下去的方法,有人能提出建议吗?还是我的概念有缺陷?似乎是个好概念 在NET3.5中,通过向VirtualzingStackPanel添加对分层数据的支持,已将SP1虚拟化支持添加到TreeView中
只要NHibernate在第一次请求访问getter时填充子列表ErrorObjects,树就会以延迟加载的方式建立起来。这就是它的设计原理,所以请对此感到高兴:-您应该实现ErrorObject/如果您希望在集合更新时更新UI,或者将ErrorObjects属性的类型设置为ObservableCollection、implements和` 我认为对于您的场景来说,最好使用ObservableCollection而不是List,如果我没有错的话,ObservableCollection也实现了IList