使用MVVM将GUI与业务逻辑分离的最后步骤?

时间:2010-01-13 21:07:41

标签: wpf mvvm blend

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

我的终极解决方案将允许我在运行时从菜单中选择皮肤,并立即将GUI从当前的GUI更改为用户选择的另一个。 任何人都可以指点我解释如何执行此操作的帖子吗?

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

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

此外,每个GUI都需要对ViewModel的引用。在我的例子中,我只是在我当前的GUI类中实例化它。对于Blend GUI,我也在那里实例化了一个,因为只有一个GUI是活动的。 是否应该使用Unity框架之类的东西?

对所有可能不连贯的问题感到抱歉,但我不太清楚我应该从这里开始。我觉得我非常接近向自己证明MVVM是从GUI角度出发的方式(我已经在可测试性位上销售了)。

2 个答案:

答案 0 :(得分:1)

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

Load XAML Resource Dictionaries at Runtime

WPF change theme/style at runtime

希望有所帮助。

答案 1 :(得分:0)

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

System.Reflection.Assembly.GetExecutingAssembly().Location

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