WPF/MVVM объединить модели во ViewModel

262
10 ноября 2017, 06:56

Буду излагать суть проблемы максимально кратко. Имеется 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?

Answer 1

Что если создать базовый класс модели и унаследовать ваши модели от него?

В базовом классе будут реализованы все публичные свойства, а в конструкторе конкретного класса создавать коллекции для нужных типов.

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());
READ ALSO
C#, MySql Connection must be valid and open

C#, MySql Connection must be valid and open

Вот дебильный быть может вопрос

233
C# MySql как конвертировать mysql таблицу в excel

C# MySql как конвертировать mysql таблицу в excel

Добрый вечер господа как конвертировать mysql таблицу в excel на C#Я установил эти ссылки(подключил пакеты):

291
Выполнить метод из стороннего класса

Выполнить метод из стороннего класса

Столкнулась с такой проблемой: Принимаю callback с сайта и обрабатываю его

217
Excel to Word (дублирование строк)

Excel to Word (дублирование строк)

Подскажите пожалуйста, как заставить текст с других столбцов дублироваться на следующей странице, если хотя бы в 1 столбце текст не помещается...

249