0

就在最近,我了解了使用 MVVM 将 GUI 与底层模型分离。我最终尽可能多地学习将我当前的应用程序转换为 MVVM,并且在很大程度上取得了成功。现在我需要弄清楚如何实际使用在 Blend 中生成的 GUI 并使用它来代替我在 Visual Studio 中设计的当前 GUI。我在网上找不到任何资源来尽可能地无缝。我想知道你们都做了什么,并为你们工作过。

我的最终解决方案是允许我在运行时从菜单中选择一个皮肤,并立即将 GUI 从当前的一个更改为用户选择的另一个。 谁能指出我解释如何做到这一点的帖子?

我目前的目标没有那么雄心勃勃——我希望能够将我的新 Blend GUI 添加到我的 Visual Studio 项目中,并且在我编译时,让新的 Blend GUI 出现。如果我想回到旧的 GUI,我将不得不重新编译。目前,没关系。

我已将 Blend 项目添加到我的 VS2008 解决方案中,并将其设置为启动应用程序。这很好——如果我运行应用程序,我的新 GUI 会出现而不是旧的。现在的问题是它需要实际上位于不同文件夹中的 DLL——原始启动应用程序的 bin\Debug 文件夹。 我是否应该将我的原始 GUI 作为启动应用程序,然后让它的应用程序代码隐藏加载另一个 GUI?

此外,每个相应的 GUI 都需要对 ViewModel 的引用。就我而言,我只是在我当前的 GUI 类中实例化它。对于 Blend GUI,我也在那里实例化了一个,因为只有一个 GUI 将处于活动状态。 这是应该使用 Unity 框架之类的地方吗?

很抱歉所有可能不连贯的问题,但我不太确定我应该如何从这里开始。我觉得我已经非常接近向自己证明,从 GUI 的角度来看,MVVM 是可行的方法(我已经在可测试性位上出售了)。

4

2 回答 2

1

我见过的所有示例都通过使用某种形式的 ResourceDictionary 交换来动态切换 GUI 外观。几个链接:

在运行时加载 XAML 资源字典

WPF 在运行时更改主题/样式

希望有帮助。

于 2010-01-14T03:54:37.770 回答
0

我发现了一个错误,在我的代码的一部分中,我使用了错误的属性来获取当前运行的程序集的路径。我现在正在使用

System.Reflection.Assembly.GetExecutingAssembly().Location

虽然这确实有效,但只有当我将 exe 从 Blend 项目的 bin\Debug 文件夹复制到我的主应用程序的 bin\Debug 文件夹时它才有效。我猜我将不得不使用构建后事件来忍受这个。在过去几个月使用 .NET 时,我被宠坏了,我不必这样做(就像以前在 C++ 中一样),因为所有引用的程序集都会自动复制过来。如果我想调试任何代码隐藏,我还必须在 Blend 项目的设置中设置启动可执行文件,这也很不方便,尤其是在路径设置不同的不同计算机上工作时。这里的任何建议也将不胜感激!

于 2010-01-14T05:52:20.903 回答