ViewModel中特定于UI的值

时间:2018-02-02 12:47:47

标签: wpf mvvm caliburn.micro

System.Windows.ResizeMode中使用特定于UI的值(例如System.Windows.WindowStateViewModel)是否有误?我正在使用 Caliburn.Micro的WindowManager ,它具有ShowWindow方法中的视图设置字典。除了这个,我不知道设置窗口属性的任何其他(简单)方法。

Imports Caliburn.Micro
Namespace ViewModels
  Public Class MainWindowViewModel
    Inherits PropertyChangedBase
    Private _windowManager As IWindowManager
    Sub New(windowManager As IWindowManager)
      _windowManager = windowManager
    End Sub
    Sub ShowUserControl()
      Dim windowSettings As New Dictionary(Of String, Object)
      windowSettings.Add("ResizeMode", ResizeMode.NoResize)
      _windowManager.ShowDialog(New UserControl1ViewModel, settings:=windowSettings)
    End Sub
  End Class
End Namespace

1 个答案:

答案 0 :(得分:2)

  

在ViewModel中使用特定于UI的值(如System.Windows.ResizeMode或System.Windows.WindowState)是错误的吗?

不是真的。这并没有打破MVVM模式。视图模型是视图的模型。是否是一个问题主要取决于您是否在几种不同类型的客户端应用程序之间共享视图模型类,例如WPF桌面应用程序和Xamarin移动应用程序。

在这种情况下,您应该更喜欢从视图模型中公开基本类型,然后在每种特定类型的客户端应用程序中使用转换器在视图模型类型和相应的视图类型之间进行转换。

但从理论上讲,就MVVM而言,视图模型并不必与构建视图的UI技术无关。