chi*_*ler 5 c# wpf static mvvm
我尝试使用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();
}}
Run Code Online (Sandbox Code Playgroud)
有没有办法让这些方法像这样保持静态?
ShowRelatedDocumentsVM.ShowRelatedDocument(A objA);
ShowRelatedDocumentsVM.ShowRelatedDocument(B objB);
Run Code Online (Sandbox Code Playgroud)
我没有找到任何有关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();
}
Run Code Online (Sandbox Code Playgroud)
或两者都错了,因为我在视图模型中创建了视图而违反了MVVM模式?
Thx提前.
如何显示对话框是 MVVM 目前尚不清楚的领域之一,有多种方法可以实现该行为。
我建议使用中介(如此处所述)或通过注入对控制对话框的视图模型的依赖关系:
interface IDialogService
{
void ShowRelatedDocumentsA(A a);
}
Run Code Online (Sandbox Code Playgroud)
...
class MyViewModel
{
private IDialogService _dialogService
public MyViewModel(IDialogService dialogService) { _dialogService = dialogService; }
public void DoSomething()
{
_dialogService.ShowDialog(...);
}
}
Run Code Online (Sandbox Code Playgroud)
其中任何一个都将允许您控制视图模型外部视图的创建,并将从 VM -> V 中删除任何显式引用。