使用NHibernate进行WPF TreeView和延迟加载数据绑定时需要提供建议

使用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

我正在做一个项目,我需要向用户提供一些TreeView。到目前为止,我已经设法使我的业务对象及其对数据库的持久性完全发挥作用

我使用NHibernate和SQLite3来存储对象。业务对象如下所示:

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