MVVM ViewModel и статические методы - PullRequest
5 голосов
/ 26 октября 2010

Я пытаюсь переписать свое приложение, используя шаблон MVVM.

У меня есть окно для отображения связанных документов для различных объектов со статическими методами, такими как:

    public partial class ShowRelatedDocuments : Window
    {

    private ShowRelatedDocuments()
    {
        InitializeComponent();
    }

    public static void ShowRelatedDocument(A objA)
    {
        ShowRelatedDocuments srd = new ShowRelatedDocuments();
        srd.HandleA(objA);
        srd.ShowDialog();
    }

    public static void ShowRelatedDocument(B objB)
    {
        ShowRelatedDocuments srd = new ShowRelatedDocuments();
        srd.HandleB(objB);
        srd.ShowDialog();
    }}

Есть ли способ сохранить эти методы статичными?

Я не нашел ничего о ViewModels и статических методах.Может ли виртуальная машина создать собственный экземпляр и показать свой вид (здесь окно)?

Или это лучший способ передать объекты в качестве параметра в конструктор виртуальной машины, например, так:

Или оба способа неверны, потому что я нарушил шаблон MVVM из-за создания представления в модели представления?

Заранее спасибо.

1 Ответ

4 голосов
/ 26 октября 2010

Как отображать диалоги - это одна из областей MVVM, которая не сразу понятна, и есть несколько способов, которыми поведение может быть достигнуто.

Я бы предложил использовать либо медиатор (как описано здесь ), либо внедрить зависимость от модели представления, управляющей диалогами:

interface IDialogService
{
    void ShowRelatedDocumentsA(A a);
}

...

class MyViewModel
{
    private IDialogService _dialogService

    public MyViewModel(IDialogService dialogService) { _dialogService = dialogService; }

    public void DoSomething()
    {
        _dialogService.ShowDialog(...);
    }
}

Любая из этих команд позволит вам контролировать создание представления вне модели представления и удалит любые явные ссылки из VM -> V.

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