Padrão para comunicação entre usercontrols aninhados e formulário pai (C # / Winforms)

5

Estou tentando decidir a melhor maneira de lidar com a comunicação entre um UserControl aninhado em outro UserControl e o próprio Form pai. Eu tenho um formulário, dentro do formulário há um UserControl com um TabControl. Cada tabulação também é representada por um UserControl.

Um objeto (para vinculação) é instanciado no formulário e, em seguida, passado para uma propriedade na primeira UC, que então passa para uma propriedade na UC aninhada. Cada UC usa um BindingSource para conectar os controles de entrada reais. Esse comportamento de encadeamento de margaridas chega a ser complicado. Agora eu quero enviar um comando Salvar de volta para o formulário principal, então eu preciso encadear alguns eventos de volta para o formulário.

Eu sinto que o objeto inteiro não deve ser propriedade do formulário pai. O objeto praticamente impulsiona todo esse aplicativo, mas como o Form e a UI estavam crescendo para ser um pesadelo de manutenção, comecei a dividir os componentes da interface do usuário em UserControls.

Eu acho que minhas perguntas são: - Este seria um bom lugar para algum tipo de padrão de Service Locator? Devo simplificar com uma instância singleton estática desse objeto que pode ser acessada de qualquer controle? - Existem outros padrões que podem ser úteis para você recomendar?

    
por Adam Plocher 12.07.2015 / 02:32
fonte

1 resposta

4

Você pode usar o padrão Mediator.

essencialmente, você tem um único objeto ao qual você vincula eventos e os transmite para os modelos de visualização, em vez de vinculá-los ao evento viewmodel. então:

public interface IMediator
{
    void NotifyColleagues(string token, object args);
    void Register(string token, Action<object> callback);
    void Unregister(string token, Action<object> callback);
}

.. na VM principal

Mediator.Register("start_Click", OnStart);

.. na sub VM

Mediator.NotifyColleagues("start_Click", this.data);
    
por 12.07.2015 / 10:10
fonte