我应该如何将WPF MainWindow“mainloop”与应用程序逻辑的“mainloop”联系起来

时间:2013-01-14 22:53:47

标签: wpf visual-studio window mvp

当我们在Visual Studio(2010)中创建WPF项目时,它会自动创建一个MainWindow.xaml,其代码隐藏包含一个带有InitializeComponent()的MainWindow类。我非常清楚地知道,在项目文件的某个地方,有一个实际的main()函数等效于演示文稿,因此当加载应用程序GUI时,GUI事件将“向下”处理应用程序层 - 只要它们一旦完成存在。

我计划在Model-View-Presenter应用程序中开发一些东西,而且我已经在嘲笑非常简单的域逻辑和应用程序外观。

我的疑问是:当我拥有自己的域逻辑时,我应该如何将Presenter与ApplicationFaçade连接,或者更实际地,WHERE以及如何(在项目文件中)我应该开始从应用程序“充实”应用程序在Visual Studio中创建的空白WPF应用程序。我已经做了类似添加现有项目的事情,但已经做了很多事情。

(编辑:来自design patterns book:“打开应用程序外观,域模型中的特定对象作为主题。此主题作为外观完成的所有操作的起点。 “这似乎是一个良好的开端......”

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

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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


您实际构建项目和文件的方式取决于您自己。您可以在一个项目中构建独立的应用程序。您将无法轻松地重复使用该代码,但您的WPF应用程序将不会注意到。

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

当您构建UI部件和Web服务部件时,您可能会将每个部件都放在不同的项目中。

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

分离到项目会阻止您在类之间创建循环依赖关系。

通常,您将从UI引用一系列项目,引用引用数据层等的业务层。您经常会看到一些交叉问题(例如日志记录和安全性),这些问题都是来自每个项目的引用。这些'层'。

最后,图层可以映射到Project(程序集)或Namespace(在项目中)。你选择哪一个取决于你。


在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>

实际入口点在您的项目设置中定义: Start Up Object

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

StartUp event

并在那里添加自己的代码

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

    private void Application_Startup(object sender, StartupEventArgs e)
    {

    }
}

更好,更面向对象和可单元测试的方法是使用PrismMVVM Light。这些框架的范围非常广泛,以至于它们保证了自己的主题。

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