UI-ViewModel 中的特定值

UI-specific values in ViewModel

ViewModel 中使用 UI 特定值如 System.Windows.ResizeModeSystem.Windows.WindowState 是错误的吗?我正在使用 Caliburn.Micro 的 WindowManager,它在 ShowWindow 方法中有视图设置字典。除了这个,我不知道设置 window 属性的任何其他(简单)方法。

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

Is it wrong to use UI-specific values like System.Windows.ResizeMode or System.Windows.WindowState in ViewModel?

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

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

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