1

我计划使用类似的东西检测设备何时插入。简而言之,看起来我需要覆盖WndProc.

在检测到正确的设备后,我想将设备上的文件添加到我的应用程序中。该应用程序具有类似于 VS 的“工作区”结构。当检测到设备时,我将添加一个ITreeView到我的工作区,并使用设备上的文件名填充该孩子的所有孩子。

问题是,我不确定将它放在我的 WPF MVVM 应用程序中的哪个位置,因为OnSourceInitialized必须调用baseWindow。我应该在带有隐藏窗口的不同线程上检测吗?我应该把它留在我的 MainWindow 代码隐藏中吗?任何建议表示赞赏。

4

4 回答 4

3

我会把它留在 MainWindow.xaml.cs 中。如果您需要覆盖 WndProc,它无论如何都是紧密相关的,并且它属于一些通常不属于您的视图模型或模型的“系统接口”。此外,使用后面的代码也没有错。

好吧,这可能只是个人意见。

于 2013-06-28T13:45:03.803 回答
1

第二次投票支持代码隐藏。如果代码与 UI 内容严格相关,则 MVVM 中的代码隐藏没有任何问题。在这种情况下,您的模型不应该关心您加载文件的位置或方式,而应该关心它需要做什么。恕我直言,这完全是一个视图问题,即当安装 USB 驱动器时,您希望视图如何反应。如果是我,我会让代码隐藏调用视图模型或模型上的方法来执行您需要的逻辑(听起来像您所描述的视图模型)。

于 2013-06-28T14:03:45.887 回答
0

我会从窗口开始这个过程,比如一个计时器,然后将数据和状态发送回 ViewModel,这些数据和状态绑定在视图中。

于 2013-06-28T14:07:57.123 回答
0

MVVM 是 Presenter 模式的一般类的抽象,通过使模型适应视图并使用数据绑定将视图逻辑与视图分离。这种抽象还允许相当简单的视图关注测试。如果您无法将视图与模型分开,或者没有进行测试,那么 MVVM 抽象就不值得为维护它而烦恼。您可以从后面的代码中轻松使用数据绑定。

鉴于这些概念,并且在阅读了您提到的文章后,我在文章中看不到任何关于枚举 USB 驱动WndProc器的内容OnSourceInitialized,因此我会做标准的事情并将该代码放入您的模型中并创建一个视图模型并将特定绑定视为合适的。

于 2013-06-28T13:57:51.330 回答