如何从代码中分离接口?

How can I divide interface from the code?

我知道我会被否决,因为这是一个抽象的问题。我知道我缺少必要的特异性,但这对我来说是一个非常重要的问题。

我多年来一直是 WinForms C# 用户。现在由于工作需要,我被要求迁移到 WPF。但现在让我疑惑的是:我用得对吗?具体来说,我是否正确划分了 xaml 界面和代码?

根据经验,我在 xaml 界面中尽我所能,尤其是之前定义的所有内容。另一方面,我让代码隐藏在所有以编程方式定义的内容之后。对吗?

然后把我能做的都放在xaml界面有什么好处?

尽可能少地在代码隐藏文件中编写代码。大多数时候,您可以使用 零线 .

要对 UI 引发的事件做出反应,您应该使用 the Commanding mechanism。这将调用一个方法,不是在您的代码隐藏中,而是在 View-Model.

那么你应该 google 了解一下 MVVM 主题。

之所以要将逻辑与代码隐藏分开,是因为代码隐藏是关于 UI 的。

如果您要执行计算,则不应将这些问题与表示层混为一谈。

例如,您可能希望将来在便携式库中进行所有计算,这样您就可以拥有 Windows phone 版本的应用程序或基于 Web 的服务,或者用网络服务代替一些繁重的计算。

这里的 yes 哲学是拥抱 SOLID 原则,WPF 只是促进它的使用并允许进行更清晰的分离以实现更好的重用和可维护性。

代码隐藏只要不包含程序逻辑就没有问题。 UI 事件和 UI 相关代码(例如:关闭 window 或打开一个新代码)在代码隐藏中完美运行,应该在那里使用。

MVVM 背后的原理是将 UI 特定例程与您的业务逻辑和功能分离。

还有一个非常重要的规则要记住,您创建的视图模型应该能够在比方说 asp.net 网站、windows 移动应用程序或通用 windows 中重复使用应用程序。所以也没有必要 UI 知道。很多时候我看到人们在一个项目中将视图 (ui) 和视图模型粘合在一起以克服视图模型的一些限制。然而,这是一种不好的做法,并且违背了将您的视图与视图模型分离并允许在其他项目中实际重用您的视图模型的主要目的。

因此,我建议我的学生将您的视图模型作为可移植的 class 启动(这会强制您不要在视图模型中使用 ui 元素)并根据您的视图使用特定平台扩展它们功能。

重用您的视图模型变得轻而易举。

作为视图模型和视图之间的粘合剂,我建议使用 Prism Prism Project page and Nuget package