0

当我们在 Visual Studio (2010) 中创建 WPF 项目时,它会自动创建一个 MainWindow.xaml,其代码隐藏包含一个 MainWindow 类,其中包含一个InitializeComponent()。我表面上知道,在项目文件的某个地方,有一个main()与演示文稿等效的实际功能,因此当加载应用程序 GUI 时,GUI 事件会在应用程序层“向下”处理 - 一旦它们存在。

我计划在 Model-View-Presenter 应用程序中开发一些东西,并且我已经在模拟非常基本的域逻辑和应用程序外观。

我的疑问是:当我有我的域逻辑时,我应该如何将 Presenter 与应用程序外观连接起来,或者更务实的是,我应该在哪里以及如何(在项目文件中)开始从空白 WPF 应用程序“充实”应用程序在 Visual Studio 中创建。我做了类似添加现有项目的东西,但已经过时了。

(编辑:来自设计模式书:“以域模型中的特定对象作为主题打开应用程序外观。该主题充当外观完成的所有操作的起点。”这似乎很好开始为发起...)

是否有任何常见、明显或最佳实践的方法?

(另外,如果有人可以为这个问题建议/编辑一个更好的标题,我将不胜感激)

谢谢你的帮助!

4

1 回答 1

1

Microsoft 的本指南(虽然有点旧)很好地解释了 Rich Gui 应用程序的层和部分:http: //msdn.microsoft.com/en-us/library/ee658087.aspx


您实际上如何构建项目和文件完全取决于您。您可以在一个项目中构建一个独立的应用程序。您将无法很容易地重用该代码,但您的 WPF 应用程序不会注意到。

您可以通过多种方式对课程进行分组。按命名空间,按程序集(项目),嵌套类等...何时使用通常取决于重用或分布在不同的机器上。

当您构建一个 UI 部件和一个 Web 服务部件时,您可能会将它们分别放在不同的项目中。

当您想在网站、Windows 应用程序和手机应用程序中重复使用您的业务课程时,您可能希望将它们分别放在不同的项目中。

分离成项目可以防止您在类之间创建循环依赖关系。

通常,您会从 UI 中获得一系列项目,这些项目引用了引用数据层的业务层等。而且您经常会看到一些交叉关注点(例如日志记录和安全性),它们是来自这些“层”中的每一个的引用'。

最后,层可以映射到项目(程序集)或命名空间(项目内)。你选择哪一个取决于你。


在 WPF 项目中,应用程序入口点由 App.Xaml 指定。您会在其中找到对要加载的主表单的引用。

 <Application x:Class="WpfApplication1.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         StartupUri="MainWindow.xaml"> <-- Start up here -->
    <Application.Resources>

    </Application.Resources>
 </Application>

实际的入口点在您的项目设置中定义: 启动对象

您可以启动 App.xaml.cs 中的任何初始化代码。最简单的方法是通过订阅OnStart事件或OnLoadCompleted事件。您还可以在 MainWindow.xaml.cs 代码中启动您的逻辑。将实际逻辑放在一个单独的类中,并从您的 OnStart 或 OnLoadCompleted 事件中引用它。

启动事件

并在那里添加您自己的代码

/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{

    private void Application_Startup(object sender, StartupEventArgs e)
    {

    }
}

一种更好、更面向对象且可单元测试的方法是使用PrismMVVM Light。这些框架的范围是如此之大,以至于它们保证了自己的主题。

我不确定你为什么想要一个主循环。除非你打算做某种游戏或 3D 渲染。在其他情况下,您可以通过向可见对象添加命令并让 Windows 处理主要输入注册和事件分派就足够了。对于长时间运行的任务,您可以使用线程在后台完成(再次不同的主题)。

于 2013-01-15T15:57:05.667 回答