Como você acessa o MainViewModel no ViewModelLocator a partir do código atrás?

Criando um aplicativo WP7 usando o MVVM light para meus modelos de exibição. Estou usando o ViewModelLocator que é adicionado quando você adiciona a biblioteca através do NuGet. Funciona muito bem, mas agora preciso obter acesso a um ViewModel a partir do código.

No meu código, o usuário clica em um botão e preciso pesquisar no MainViewModel (que contém vários modelos de exibição) e encontrar um com base nos critérios que o usuário inseri

Normalmente, eu responderia ao evento Click do botão, mas não tenho uma variável de instância da classe ViewModelLocator para obter o MainViewModel para realizar a pesquisa. Com o modelo padrão (não MVVMLight) para Windows Phone 7, a classe App possui uma variável estática para o modelo de exibição principal, para que você possa acessá-lo a qualquer momento com App.ViewModel.

Há alguma conversa do twitter sobre o uso de comandos, o que seria bom, mas em algum momento eu tenho que executar uma pesquisa de código em vários vms para obter os resultados necessários. Provavelmente, é necessário injetar um serviço ISearchViewModel no View ou algo para fazer isso funciona

Aqui está a implementação do ViewModelLocator fornecida:

public class ViewModelLocator
{
    private static MainViewModel _main;

    public ViewModelLocator()
    {
        _main = new MainViewModel();
    }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
    "CA1822:MarkMembersAsStatic",
    Justification = "This non-static member is needed for data binding purposes.")]
    public MainViewModel Main
    {
        get
        {
            return _main;
        }
    }
}

Portanto, a partir do código por trás de outra visualização, como você obtém acesso ao Main (MainViewModel contém todas as listas de dados e possui um método de pesquisa que eu chamo)? Ou você deveria?

Só imaginando como as pessoas estão resolvendo esse tipo de problema?

Obrigado

questionAnswers(4)

yourAnswerToTheQuestion