最近我已经有足够的创建ViewModel样板代码,所以我最终将NotifyPropertyChanged功能添加到基于DynamicProxy的解决方案。
为了让所有WPF的Changenotification机制适用于我的实现,我现在要做的就是将我的Collections与ObservableCollections交换,遗憾的是它会带来性能问题(添加/删除每条记录的更改通知,所以不适合用于批量使用,因为UI太忙于尝试跟上更改列表。)
因此,在我的模型中,其他模型的集合(HasMany关系,即)不在列表中,而是在具有两个方法SuspendCollectionChangeNotification
和ResumeCollectionChangeNotification
的ObservableCollection派生中(A有点像here)所示的实现。
基础架构就在那里,现在我正在寻找一个Interceptor钩子,它让我能够在NHibernate加载子数据之前调用Suspend()
,并在完成之后调用Resume()
。
我有点害怕我最终将这个添加到我上面提到的代理中,它很好地掌握了所请求的属性,但是将它保存在NHibernate Interceptor中会很可爱。
答案 0 :(得分:0)
NHibernate有IInitializeCollectionEventListener
,在加载集合时会给你InitializeCollectionEvent
。
你可以像这样挂钩:
var listener = new YourCollectionListenerImpl();
configuration.SetListener(ListenerType.LoadCollection, adapter);
不幸的是,这只会告诉您正在进行集合加载。我认为不可能确定它何时开始以及何时结束。