如果在ViewModel中使用PresentationFramework的枚举,是否会破坏MVVM?

塞尔吉奥

简单的问题(对我来说很棘手:D)

我需要将设置参数从ViewModel通过Caliburn.Micro的WindowManager传递给Window。

我想设置一些属性,例如WindowStyle,WindowStartupLocation,ResizeMode等,但是我需要PresentationFramework中包含的枚举。

使用em是否会破坏MVVM模式?

谢谢!:D

盖奥特·福

没有严格的规范MVVM可以用来评估您的问题。但是在开发人员中颇受欢迎的一种方法是创建这样的界面...

public interface IWindowStateBehaviour
{
    void Maximize();
    void Minimize();
    void Normal();
}

...具有您希望使用的各种功能。这其中有三个用于设置窗口状态:MaximizeMinimize,和Normal基本上抽象和包装一个枚举。

该接口的实现如下所示:

public class WindowStateBehaviour : IWindowStateBehaviour
{
    public void Maximize()
    {
        Application.Current.MainWindow.WindowState = WindowState.Maximized;
    }
    public void Minimize()
    {
        Application.Current.MainWindow.WindowState = WindowState.Minimized;
    }
    public void Normal()
    {
        Application.Current.MainWindow.WindowState = WindowState.Normal;
    }
}

...并且这允许VM通过依赖项注入接收IWindowStateBehaviour的实例它也是一种抽象,可以使VM免受任何Windows特定名称空间的影响。

这种方法的最大回报是,您可以拥有一个此类用于单元测试的类...

public class FakeWindowStateBehaviour : IWindowStateBehaviour
{
    public void Maximize(){}
    public void Minimize(){}
    public void Normal() { }
}

...不会执行任何操作,并且不会因需要呈现程序集而遮盖测试过程。

您可以对启动位置,调整大小模式和其他参数使用类似的技术,然后使用Unity或使用任何DI将它们注入到VM中。因此,虽然直接使用Presentation Framework的枚举不一定会破坏MVVM,但是有更好的技术可以促进抽象和“关注点分离”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果在Laravel 5项目中使用andersao / l5-repository,是否会破坏控制原理的反转?

如果在批处理操作中使用Firestore增量,是否会获得与事务相同的结果?

如果在Serializable接口中使用Java,Java是否会自动使类可序列化?

如果在findAll中使用beautifulsoup

如果在MySQL中使用SUM

如果在Excel中使用AND OR功能

如果在r中使用%in%

如果在线程宏中使用,是否可以解构?

如果在查询中使用索引列的子集,是否保留索引的MySQL查询性能优势?

如果在SBT中使用了SNAPSHOT依赖项,是否可以拒绝发布?

如果在IB中使用自动版面设置视图,如果尝试以编程方式更改其框架会怎样?

如果在github动作中使用环境变量

如果在Ruby中使用Tenerary声明

如果在CardView中使用,则标记LinearLayout

如果在SQL搜索中使用where和or子句

如果在 debounce 函数中使用,则 this 未定义

如果在列表理解中使用for循环

如果在R Shiny应用中使用else

如果在 Postgresql 中使用 select 语句

如果在 htaccess 中使用 env 函数

如果在NetLogo中使用语句

如果在 python 中使用 datetime 库的语句

ServiceStack IAppSettings 尚未准备好,如果在构造函数中使用会导致 NULL 引用异常

在Python中,如果在递归调用之后不使用递归函数中的变量,是否会释放它们的内存?

如果在c中的struct内定义,枚举的作用域是否有限?

如果在2个线程中使用,是否值得将size_t声明为std :: atomic?

检查应用程序是否已部署,如果在 Jenkins 中使用 Bash 部署,则取消部署

如果在“ using”语句中使用try / catch,是否将处置一次性资源?

如果在Filter()函数中使用索引,是否会得到未定义的引用错误?