Одна модель, несколько моделей просмотра и обновляемое представление с использованием WPF? - PullRequest
0 голосов
/ 09 марта 2020

Я создаю редактор BPMN с использованием WPF и должен включать, помимо прочего, набор различных типов task . Каждый тип задачи имеет некоторые общие свойства, но также включает некоторую информацию о типе c. Однако для данного элемента задачи пользователь должен иметь возможность изменить его тип, и даже информация, указывающая c на данный тип задачи, должна сохраняться между такими изменениями.

Поэтому я подумал о создании:

  • один класс модели TaskModel, который будет объединять свойства всех типов задач
  • отдельный класс XXXTaskViewModel для каждого типа задачи, предоставляя только свойства, связанные с этим типом
  • общий класс TaskView, представляющий задачу как визуальный элемент на холсте редактора

Когда пользователь изменяет тип задачи (используя сетку свойств), a PropertyChanged событие запускается, что обрабатывается в TaskView для изменения DataContext модели представления для новой.

Так как я совершенно новичок в C# и мне нужно реорганизовать и улучшить чужой код Мои первые вопросы:

  • Является ли такой дизайн правильным, то есть соответствует ли принципам MVVM? Или, может быть, существуют другие лучшие шаблоны / решения, которые я мог бы использовать?
  • Можно ли вообще обрабатывать PropertyChanged событий в представлении?

Я пытался реализовать INotifyPropertyChanged на мой взгляд (для изменения DataContext):

public partial class BaseElementView : DragableUserControl, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public BaseElementView()
    {
        InitializeComponent();

        PropertyChanged += PropertyChangedHandler;
    }

    private void PropertyChangedHandler(object sender, PropertyChangedEventArgs e)
    {
        Console.WriteLine("A property has changed: " + e.PropertyName);  // just a proof-of-concept
    }

    // ...
}

Однако PropertyChanged фактически не перехватывается (хотя это же событие обрабатывается классом модели представления). Кроме того, я получаю подсказку анализатора кода:

Событие BaseElementView.PropertyChanged никогда не используется.

Я не знаю, почему это произошло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...