如何在Fluent nHibernate中使用ObservableCollection?

3
ObservableCollection<ItemPedido> Items

但是现在在Fluent nHibernate中,我不知道如何使用它。

有没有一种简单的方法可以在Fluent nHibernate中使用ObservableCollection?

我注意到有一个DLL NHibernate.Collection.Observable;

但是我不知道如何替换我当前使用IList的代码:

    public virtual IList<ItemPedido> Items
    {
        get { return _Items; }
        set { _Items = value; OnPropertyChanged(System.Reflection.MethodBase.GetCurrentMethod().Name.Substring(4)); /*OnPropertyChanged("Items");*/ }
    } private IList<ItemPedido> _Items;

如何将以上代码更改,以使其与Observable Collection和Fluent nHibernate一起使用?

你能明确一下你感兴趣的事件吗?具体来说,你是否想要在NHibernate作为延迟加载的一部分从数据库填充集合时触发的事件? - Paul Turner
是的,我希望当nhibernate填充集合时,ListBox能够自动填充。并且当我向集合添加项目时也是如此。我正在使用延迟加载。现在我正在使用ListBoxItems.Items.Refresh(); 如果我使用ObservableCollection,我将不需要调用Refresh方法。它将自动完成。 - Tony
好的,但是当NHibernate首次加载集合时,你想要触发一个事件吗? - Paul Turner
我认为是的,因为我计划与WPF一起使用它。因此,对集合所做的所有更改都必须能够被ListBox观察到。 - Tony
2个回答

3

继续使用ObservableCollection<T>作为IList<T>的实现 - 无需更改业务代码。

您需要做的就是在进行延迟加载时配置NHibernate,将IList<T>在内部替换为NhibernateObservableCollection。

我使用了

uNhAddIns.WPF.Collections.Types.ObservableListType<T>

来自非官方NHibernate Addins(unhaddins)的此内容。

但是,任何其他实现NhibernateObservableCollection的方法都可以。

fluent-nibernate-with-wpf-convention-to-use-unhaddins-observablelisttypet-as-Default中,您会发现我用于使用Fluent nHibernate配置ObservableCollection的示例。

请注意,如果要使用uNhAddIns.WPF.Collections.Types.ObservableListType<T>:没有针对此文件的二进制分发,因此必须从c#源代码编译uNhAddIns.WPF.dll。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接