Eu discordo totalmente do conceito de que o modelo não deve implementar o INotifyPropertyChanged
. Essa interface não é específica da interface do usuário! Simplesmente informa de uma mudança. De fato, o WPF usa isso fortemente para identificar alterações, mas isso não significa que seja uma interface de interface do usuário. Eu compararia com o seguinte comentário: " Um pneu é um acessório de carro ". Claro que sim, mas bicicletas, ônibus etc. também o usam. Em resumo, não tome essa interface como uma coisa de interface do usuário.
Dito isto, isso não significa necessariamente que acredito que o Modelo deva fornecer notificações. De fato, como regra geral, o modelo não deve implementar essa interface, a menos que seja necessário. Na maioria dos casos, em que nenhum dado do servidor é enviado por push para o aplicativo cliente, o modelo pode ficar obsoleto. Mas se estiver ouvindo os dados do mercado financeiro, não vejo por que o modelo não pode implementar a interface. Como exemplo, e se eu tiver uma lógica que não seja da interface do usuário, como um serviço que, quando recebe um preço de compra ou de venda por um determinado valor, emite um alerta (por exemplo, por meio de um email) ou faz um pedido? Esta poderia ser uma possível solução limpa.
No entanto, existem diferentes maneiras de conseguir as coisas, mas eu sempre argumentaria a favor da simplicidade e evitaria redundância.
O que é melhor? Definir eventos em uma coleção ou alterações de propriedade no modelo de visualização e propagá-lo para o modelo ou fazer com que a visualização atualize intrinsecamente o modelo (por meio do modelo de visualização)?
A linha inferior sempre que você vê alguém dizendo que " você não pode fazer isso ou aquilo " é um sinal de que eles não sabem do que estão falando.
Realmente depende do seu caso e, de fato, o MVVM é uma estrutura com muitos problemas e ainda estou para ver uma implementação comum do MVVM em todos os aspectos.
Eu gostaria de ter mais tempo para explicar os vários tipos de MVVM e algumas soluções para problemas comuns - principalmente fornecidos por outros desenvolvedores, mas acho que terei que fazê-lo outra vez.