如何让WPF / XAML设计器使用具有依赖关系的自定义类?

时间:2011-12-19 00:54:07

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

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

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

有没有办法将依赖项传递给您打算在XAML中使用的类,该类将执行以下 all

  • 不要破坏设计师。
  • 将依赖项保密。
  • 确保在使用类之前设置依赖关系。

2 个答案:

答案 0 :(得分:2)

你想要做得多么糟糕?

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

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

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

但问题在于:XAML 2009只能在运行时通过XAML Reader加载,无法编译。 (见Can't get the new 2009 XAML primitives working, why?)。

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

<小时/> 稍后编辑:我重读了您的问题,并意识到您已将“不打破设计师”视为您的要求之一。这不包括XAML 2009的可能解决方案。

答案 1 :(得分:-2)

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

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