Очень поздно, но должно помочь другим с такой же проблемой.
Решение, которое я использовал, заключается в том, чтобы обернуть пользовательский список (в данном случае NotificationList) вокруг поля в получателе.
private IList<IParameter> _parameters = new List<IParameter>();
get
{
return new NotificationList<IParameter>(_parameters);
}
Этот список является оберткой вокруг списка, поэтому привязка данных будет перенаправлена в исходный список.
public class NotificationList<T> : IList, IList<T>
{
IList<T> myList;
public NotificationList(IList<T> list)
{
myList = list;
}
int IList.Add(object item)
{
myList.Add ((T) item);
}
// implement both IList<T> and IList
// ...
}
Для меня это исправило проблему с привязкой данных, но создало побочный эффект, при котором каждый раз при сбросе сеанса все элементы в коллекции обновлялись в БД, независимо от того, изменились они или нет. Чтобы решить эту проблему, я изменил отображение для прямого доступа к полю. См. this в Hibernate, который также применим к NHibernate.
Это новое (Свободное) отображение:
HasMany(x => x.Parameters)
.Cascade.All()
.Access.CamelCaseField(Prefix.Underscore);