Я изучаю Fluent NHibernate, и эта проблема возникла из этого проекта.
У меня есть базовый класс и базовый интерфейс:
public abstract class Base : IBase
{
public virtual Guid Id { get; set; }
public virtual bool IsValid()
{
return false;
}
}
public interface IBase
{
Guid Id { get; set; }
bool IsValid();
}
, от которого я наследую все остальные классы своего домена:
public class Item:Base, IItem
{
public virtual string Name { get; set; }
public override bool IsValid()
{
<snip>
}
<snip>
}
public interface IItem: IBase
{
string Name { get; set; }
<snip>
}
Однако, когда я пытаюсь привязать список всех предметов к комбинированному списку winforms, я получаю ошибку.
var ds = from i in GetSession().Linq<IItem>() select i;
cmbItems.DataSource = ds.ToArray();
this.cmbItems.DisplayMember = "Name";
this.cmbItems.ValueMember = "Id";
Я получаю сообщение об ошибке:
Невозможно выполнить привязку к новому элементу значения.
Имя параметра: значение
Я понял, что это происходит потому, что я внедряю IBase на IItem. Если я изменю IItem, он будет работать нормально.
public interface IItem: IBase
{
Guid Id { get; set; }
string Name { get; set; }
<snip>
bool IsValid();
}
Итак, помимо практического, просто заставьте его работать, я правильно делаю интерфейсы? Разве я не должен иметь интерфейсы для реализации других интерфейсов? Если мне нужно, чтобы IItem внедрил IBase, есть ли способ правильно привязать элемент управления Winforms?