我对WPF和MVVM相对较新,我试图了解当命令在多个视图模型中具有依赖性时如何正确使用命令。
几个例子:
是否有一些普遍接受的方式来处理我所缺少的?
答案 0 :(得分:1)
在一般的视图模型层应具有1:用图1的关系,不应该有很好的理由一个“保存”功能中的图模型,然后通过另一个视图模型称为存在
听起来您应该做的就是将该逻辑放入服务中,例如:
public interface ISerializationService
{
void Save(SomeData data);
}
然后,您需要此服务的实现并完成实际工作:
public class SerializationService : ISerializationService
{
void Save(SomeData data)
{
// actual save happens here
}
}
然后,您的视图模型应包含指向这些服务实例的属性:
public class MyViewModel : ViewModelBase
{
[Inject]
public ISerializationService SerializationService { get; set; }
// called when the user clicks a button or something
private void ButtonClickCommand()
{
this.SerializationService.Save(this.SomeData);
}
}
剩下的唯一的问题是“什么套SerializationService的价值?”,为此,你需要一个依赖注入框架。那里有很多东西,MVVMLight会自己安装,但是Ninject是事实上的标准。当正确实施的注入框架会为你创建的所有视图模型,然后将“注入”的依赖关系,即你的SerializationService
属性,类型ISerializationService
,将用实例来初始化您的{{1} }类(在这种情况下也将配置为单例)。
依赖注入需要花点时间才能使您动起来,但是一旦开始使用它,您将永远不会回头。它有利于完成分离的,而担忧缓解需要指针传递给所有的一切向上和向下的结构分层。