【问题标题】:How do you get the WPF / XAML designer to work with custom classes with dependencies?如何让 WPF / XAML 设计器使用具有依赖项的自定义类?
【发布时间】:2011-12-19 00:54:07
【问题描述】:

我正在使用自定义类在 WPF 应用程序中执行验证,并定义了一个继承自 ValidationRule 的类。该类具有我希望 AutoFac 在运行时注入的依赖项,但 Visual Studio 2010 XAML 设计器需要一个无参数构造函数才能工作。

似乎唯一的解决方案是为依赖项创建一个 DependencyProperty 并将其绑定到 XAML 中,但这意味着该依赖项是可公开访问且可变的,这两者都不是我想要的。

有什么方法可以将依赖项传递给您打算在 XAML 中使用的类,该类将执行以下所有操作?

  • 不要破坏设计者。
  • 保持依赖私有。
  • 确保在使用类之前设置依赖项。

【问题讨论】:

    标签: wpf visual-studio-2010 xaml inversion-of-control xaml-designer


    【解决方案1】:

    你有多想这样做?

    XAML 2009 中的功能提供了以下可以帮助您的元素:

    • x:Arguments 允许您将参数传递给构造函数。这个参数能否以某种方式绑定到您的视图模型的属性?

    • x:FactoryMethod 允许您指定创建对象的方法。我假设这可以是您的窗口或用户控件的方法,它可以访问您的依赖容器。

    但问题是:XAML 2009 只能在运行时通过 XAML 阅读器加载,不能编译。 (见Can't get the new 2009 XAML primitives working, why?)。

    因此,全局静态对象 (eurgh) 可能仍然是不那么痛苦的解决方案。


    稍后编辑:我重新阅读了您的问题,并意识到您已将“不破坏设计师”作为您的要求之一。这将 XAML 2009 排除在可能的解决方案之外。

    【讨论】:

      【解决方案2】:

      这是一个很好的问题。我使用了这里演示的技术来保持设计师的工作:http://jonas.follesoe.no/2008/07/24/youcard-re-visited-implementing-dependency-injection-in-silverlight/

      它不仅可以保持工作,而且您可以使用该技术将模拟放入设计器中。非常方便。

      【讨论】:

      • -1 来自我,因为它没有回答具体问题。 (您链接到的 2000 字博客中的某处可能有答案,在这种情况下,您应该提取答案并将其放在这里)
      • 这是一篇非常有趣的博文,我们正在使用类似的技术来启用 XAML 中的 ViewModel 绑定,并让 AutoFac 处理依赖关系。问题是最后他实际上并没有在 XAML 中声明任何自定义类,他使用的是绑定表达式,对于我的具体示例,我们正在讨论使用 XAML 集合语法将项目添加到没有设置器的属性。见这里:msdn.microsoft.com/en-us/library/… 不过谢谢。
      猜你喜欢
      • 2014-01-15
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      相关资源
      最近更新 更多