打开文件对话框MVVM
好吧,我真的很想知道MVVM开发者如何处理WPF中的打开文件对话框。
我真的不想在我的ViewModel中执行此操作(其中“浏览”是通过DelegateCommand引用的)
void Browse(object param)
{
//Add code here
OpenFileDialog d = new OpenFileDialog();
if (d.ShowDialog() == true)
{
//Do stuff
}
}
因为我认为这违背了MVVM方法。
我该怎么办?
这里要做的最好的事情就是使用一项服务。
服务只是您从中央服务存储库(通常是IOC容器)访问的类。 该服务然后实现您需要的OpenFileDialog。
所以,假设你在Unity容器中有一个IFileDialogService
,你可以这样做...
void Browse(object param)
{
var fileDialogService = container.Resolve<IFileDialogService>();
string path = fileDialogService.OpenFileDialog();
if (!string.IsNullOrEmpty(path))
{
//Do stuff
}
}
我希望对其中的一个答案发表评论,但唉,我的声望还不够高。
有一个像OpenFileDialog()这样的调用违反了MVVM模式,因为它隐含了视图模型中的视图(对话框)。 视图模型可以调用类似GetFileName()(也就是说,如果简单绑定不够),但它不应该在乎如何获得文件名。
我使用一个服务,例如我可以传入我的viewModel的构造函数或通过依赖注入来解析。 例如
public interface IOpenFileService
{
string FileName { get; }
bool OpenFileDialog()
}
和一个实现它的类,使用OpenFileDialog。 在viewModel中,我只使用接口,因此可以在需要时模拟/替换它。
链接地址: http://www.djcxy.com/p/56117.html下一篇: Implementing MVVM in WPF without using System.Windows.Input.ICommand