MVVM ViewModel和静态方法

时间:2010-10-26 11:22:24

标签: c# wpf mvvm static

我尝试使用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();
    }}

有没有办法让这些方法像这样保持静态?

ShowRelatedDocumentsVM.ShowRelatedDocument(A objA);
ShowRelatedDocumentsVM.ShowRelatedDocument(B objB);

我没有找到任何有关ViewModels和静态方法的信息。 VM可以创建自己的实例并显示他的View(这里是一个窗口)吗?

或者是将对象作为参数传递给VM的构造函数的更好方法吗?

public ShowRelatedDocumentsVM(A objA)
{
  HandleA(obj A)
  ShowRelatedDocuments srd = new ShowRelatedDocuments();
  srd.DataContext = this;
  srd.ShowDialog();
}

public ShowRelatedDocumentsVM(B objB)
{
  HandleB(objB);
  ShowRelatedDocuments srd = new ShowRelatedDocuments();
  srd.DataContext = this;
  srd.ShowDialog();
}

或者两种方式都是错误的,因为我在视图模型中创建了视图而违反了MVVM模式?

提前谢谢。

1 个答案:

答案 0 :(得分:4)

如何显示对话框是MVVM的一个尚未明确的领域,并且可以通过多种方式实现这一行为。

我建议使用中介(如here所述)或在控制对话框的视图模型上注入依赖项:

interface IDialogService
{
    void ShowRelatedDocumentsA(A a);
}

...

class MyViewModel
{
    private IDialogService _dialogService

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

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

其中任何一个都可以允许您控制视图模型之外的视图创建,并将从VM中删除任何显式引用 - >诉