Буду излагать суть проблемы максимально кратко. Имеется 2 модели:
//Model1
class ClassModel : INotifyPropertyChanged
{
public ClassModel()
{
Fields = new ObservableCollection<FieldModel>();
Methods = new ObservableCollection<MethodModel>();
Properties = new ObservableCollection<PropertyModel>();
Events = new ObservableCollection<EventModel>();
uControl = new ClassUC
{
DataContext = this
};
}
private UserControl uControl;
public UserControl UControl
{
get
{
return uControl;
}
}
private string className="test";
public string ClassName
{
get
{
return className;
}
set
{
className = value;
NotifyPropertyChanged("ClassName");
}
}
public ObservableCollection<FieldModel> Fields { get; set; }
public ObservableCollection<MethodModel> Methods { get; set; }
public ObservableCollection<PropertyModel> Properties { get; set; }
public ObservableCollection<EventModel> Events { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
//Model2
class InterfaceModel
{
public InterfaceModel()
{
Methods = new ObservableCollection<MethodModel>();
Properties = new ObservableCollection<PropertyModel>();
Events = new ObservableCollection<EventModel>();
uControl = new InterfaceUC()
{
DataContext = this
};
}
private UserControl uControl;
public UserControl UControl
{
get
{
return uControl;
}
}
private string className = "test";
public string ClassName
{
get
{
return className;
}
set
{
className = value;
NotifyPropertyChanged("ClassName");
}
}
public ObservableCollection<FieldModel> Fields { get; set; }
public ObservableCollection<MethodModel> Methods { get; set; }
public ObservableCollection<PropertyModel> Properties { get; set; }
public ObservableCollection<EventModel> Events { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Как возможно их держать в одном списке, чтобы потом через ItemsControl выводить этот самый список, потому что эти классы похожи за исключением того, что InterfaceModel не содержит коллекции для типа FieldModel?
Что если создать базовый класс модели и унаследовать ваши модели от него?
В базовом классе будут реализованы все публичные свойства, а в конструкторе конкретного класса создавать коллекции для нужных типов.
public class BaseModel : INotifyPropertyChanged { /*общие свойства*/ }
public class ConcreteModel1 : BaseModel { /*какой-то код*/ }
public class ConcreteModel2 : BaseModel { /*какой-то код*/ }
//--------------------------------------
var lists = new ObservableCollection<BaseModel>();
lists.add(new ConcreteModel1());
lists.add(new ConcreteModel2());
Сборка персонального компьютера от Artline: умный выбор для современных пользователей