简单的问题(对我来说很棘手:D)
我需要将设置参数从ViewModel通过Caliburn.Micro的WindowManager传递给Window。
我想设置一些属性,例如WindowStyle,WindowStartupLocation,ResizeMode等,但是我需要PresentationFramework中包含的枚举。
使用em是否会破坏MVVM模式?
谢谢!:D
没有严格的规范MVVM
可以用来评估您的问题。但是在开发人员中颇受欢迎的一种方法是创建这样的界面...
public interface IWindowStateBehaviour
{
void Maximize();
void Minimize();
void Normal();
}
...具有您希望使用的各种功能。这其中有三个用于设置窗口状态:Maximize
,Minimize
,和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] 删除。
我来说两句