【发布时间】:2015-02-24 21:51:15
【问题描述】:
我已阅读有关使用 mvvm 模式打开对话框的讨论。我见过几个使用服务的例子,但我不明白所有部分是如何组合在一起的。我发布了这个问题,寻求指导我应该阅读的内容,以更好地了解我所缺少的内容。我将在下面发布我所拥有的内容,它确实有效,但从我在这些帖子中看到的情况来看,我做得不对,或者可能没有有效地做。我看到在哪里创建了一个对话界面,然后是一个使用该界面来完成实际工作的类。然后在 ViewModel 中,一个构造函数传入这个接口,这是真正让我感到困惑的部分,不知道传入的是什么,没有足够的信息来连接点,也不知道我错过了什么。
这是我看过的一篇帖子:https://stackoverflow.com/a/1044304/4593652 我有点明白他们的建议,但对于学习的人来说,这还不够。我不是要求任何人为我写这篇文章,只是希望对我应该阅读哪些内容以了解这些部分如何组合在一起提供一些建议。
在我的代码中,我有一个这样的类:(这行得通,我只是觉得我在其他帖子上阅读的内容中遗漏了一些东西)
public class OpenDialogService
{
public string GetOpenDialog(string title)
{
CommonOpenFileDialog dlg = new CommonOpenFileDialog();
dlg.Title = title;
dlg.IsFolderPicker = true;
dlg.AddToMostRecentlyUsedList = true;
dlg.AllowNonFileSystemItems = false;
dlg.EnsureFileExists = false;
dlg.EnsurePathExists = true;
dlg.EnsureReadOnly = false;
dlg.EnsureValidNames = true;
dlg.Multiselect = false;
dlg.ShowPlacesList = true;
if (dlg.ShowDialog() == CommonFileDialogResult.Ok)
{
return dlg.FileName;
}
return null;
}
}
然后当我的命令被调用时,我在我的 ViewModel 中使用它。
path = new OpenDialogService().GetOpenDialog("...");
【问题讨论】:
-
答案会有点固执。如果它对你有用,坚持下去,直到你找到更好的方法。这是学习过程的一部分。编程中没有单一的“正确方法”。
-
@walther 我不确定。虽然没有一种方法可以正确编程,但有些模式如果你没有正确实现就不再是那种模式,它们是别的东西。在这种情况下,他没有正确实现服务模式。