Нужны рекомендации по WPF TreeView и привязке ленивых данных с помощью NHibernate - PullRequest
1 голос
/ 25 января 2011

Я работаю над проектом, в котором мне нужно предоставить пользователям несколько древовидных представлений. До сих пор мне удалось получить полностью работоспособные мои бизнес-объекты и их сохранение в базе данных.

Я использую 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)

Кто-нибудь может посоветовать, если это способ продолжить? Или у меня ошибочная концепция?

Ответы [ 3 ]

0 голосов
/ 25 января 2011

Вот как это работает, так что просто радуйтесь: -)

0 голосов
/ 05 марта 2011

Вы должны сделать ErrorObject орудие INotifyPropertyChanged / INotifyCollectionChanged, если вы хотите, чтобы пользовательский интерфейс обновлялся при обновлении коллекции, ИЛИ сделать свойство ErrorObjects типа ObservableCollection<ErrorObject>, ObservableCollection<T>, реализует INotifyCollectionChanged и INotifyPropertyChanged `.

Я думаю, что лучшей идеей для вашего сценария будет использование ObservableCollection вместо List, если я не ошибаюсь, ObservableCollection<T> также реализует IList<T>.

0 голосов
/ 25 января 2011

Кажется, это хорошая концепция.

В NET 3.5 SP1 добавлена ​​поддержка виртуализации в TreeView (добавлена ​​поддержка иерархических данных в VirtualizingStackPanel).

Пока NHibernate заполняетдочерний список ErrorObjects, когда он был запрошен (первый доступ к геттеру), дерево должно формироваться с отложенной загрузкой.

...