有点这是意见和风格。 。 。这里是我的方法:
问题1:
我有一个处理的任何确认一个工具类,我用的是轻量级的消息在MVVM光的观点,确认和视图模型之间处理通信。
编辑:于1点
从我的命令中提供更多的信息,我会沿着 “ConfirmDeletionMessage”,然后由我的对话工具 拿起线发送消息类。对话框实用程序类将显示适当的消息给 用户,并检查结果。根据结果,它会在 中播出一个“DeletionConfirmedMessage”或 “DeletionCanceledMessage”,然后由ViewModel处理到 ,完成或取消删除。
有参与,如果你有多个订户这个 消息,因为你不会知道他们会进行处理, 什么样的顺序,但如果你有消息消费者严格的管理,或确保 一些风险他们能够以随机顺序运行,这种方法很好地工作 ,它以可测试的 方式分隔您的视图和模型代码。
问题2:
这是一个艰难的一个,并且它要依赖于整个应用程序。我个人很喜欢把它放在物品的视图模型中。这样,你不必担心你的第三个问题。相反,删除操作只需处理正在处理的项目。 但是,如果您必须对列表项外的数据采取行动(如将其从列表中移除),则更有意义的是该命令位于父视图模型上。
问题3:
使用CommandParameter
财产。你可以将它绑定到任何你想要的。
编辑以接听#2
马克·格林(以下谁评论)让我思考。我原先采用了WP7的这种方法,它绝对适合我需要做的事情。但是,还有其他方法可以处理这个问题,这一点绝对应该考虑。另一种选择是可以由视图模型使用的“确认类”。如果您使用的是IoC内核,则使用构造函数/属性注入变得很容易。或者,如果您有其他获得课程的方法,请这样做,但要以可以在测试中嘲笑的方式进行。它可能是这个样子:
public class ExampleViewmodel : ViewModel
{
private IConfirmDialogManager _dialogManager;
public ExampleViewmodel(IConfirmDialogManager dialog)
{
_dialogManager = dialog;
}
// ... code happens ...
private void DeleteCommand()
{
bool result = _dialogManager.Confirm("Are you sure you want to delete?");
}
}
随着IConfirmDialogManager接口,看起来像这样:
public interface IConfirmDialogManager
{
bool Confirm(string message);
}
,你会然后实施适当的。
如果你有任何问题可以在未来各自独立,请分别询问每一个。所有三个问题似乎都不错(每个问题本身),因此我没有理由投票结束。 –