【发布时间】:2011-08-15 12:47:07
【问题描述】:
我将 MVVM Light 和 Prism 与视图模型定位器模式一起使用。我真的很喜欢在 Blend 中使用设计时视图模型,但我不一定希望将它与我的生产代码一起提供。有没有办法将设计时视图模型放在另一个程序集中,然后告诉视图模型定位器在那里找到它?似乎设计时程序集 (*.Design.dll) 可以帮助解决这个问题,但我不知道如何解决。
【问题讨论】:
-
为什么不将 xaml 文件与 DesignData 构建操作一起使用?我已经回答了我已经解释了如何正确使用它的问题:stackoverflow.com/questions/5693283/…,但是提出这个问题的人想要的不是 Blend 中的设计数据。我想知道为什么每个人都不愿意使用如此简单的方法。
-
我不使用 DesignData,因为我的生产视图模型大量注入了构造函数依赖项。这意味着没有默认构造函数,因此没有从 XAML 创建。 VML 定位器模式为我解决了所有这些问题。即使我遗漏了一些东西并且可以将 DesignData 与注入构造函数的 VM 混合使用,它仍然会在生产程序集中留下额外代码和资源的问题。所以我会转过身来:如果我使用 DesignData,我如何将设计资源字典放在另一个程序集中并让 Blend 加载它而无需运送该程序集?
-
如果清除属性CustomTool(去掉MsBuild值)其实是没有这个问题的。之后,您将能够在没有默认构造函数的情况下定义模型。具有此操作的文件(DesignData 而不是 Page 或 Resource)将不会包含在最终程序集中。如果您不相信 - 您可以尝试使用反射器等反编译器打开程序集。
-
@vorrtex 这就是那个提示 - 这意味着我需要调整我的 ViewModel 类,但总的来说它比定义其他类更好。不过,您确实需要一个无参数的构造函数 - 即使您清除了自定义工具,如果没有该构造函数,设计时支持也无法工作。
标签: c# silverlight expression-blend mvvm-light viewmodellocator