【发布时间】:2014-05-20 21:23:40
【问题描述】:
SystemEvents.SessionSwitch += 新的 SessionSwitchEventHandler(SystemEvents_SessionSwitch);
我正在构建一个 wpf 应用程序,计算工作站锁定和解锁之间的时间 但是如果不放入主窗口代码隐藏,我很难实现它
我用来启动和停止计时器的代码
SystemEvents.SessionSwitch +=
new SessionSwitchEventHandler(SystemEvents_SessionSwitch);
private static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
{
if (e.Reason == SessionSwitchReason.SessionLock)
{
//Start Timer
}
else if (e.Reason == SessionSwitchReason.SessionUnlock)
{
//Stop Timer -> show window
}
}
问题是,此事件驻留在 Microsoft.Win32 中 - 我似乎无法在 XAML 中引用它(如果我可以将它连接到 ICommand 代替)
你们所有的 MVVM 专家,我该怎么办? 我是否将其保留在主窗口代码隐藏中? 或者我可以在 XAML 中实际引用 Win32
还有一个附带问题... 计时器逻辑 - 我是否将其保存在单独的类中并将值存储在模型中? 不用说 - 我对 MVVM 还很陌生
【问题讨论】:
-
就个人而言,我只是在视图模型的激活/停用中挂钩和取消挂钩事件(取自 Caliburn.Micro 的命名法)。那么在视图模型中这样做应该没有问题...
-
MVVM != 没有代码隐藏。 UI 逻辑在代码隐藏中。应用程序逻辑进入 VM。