如何使用工厂方法实例化 XAML 中的对象

How to instantiate an object in XAML with a factory method

在构造函数中使用 async/await 的需要使我想到了实例化对象的静态工厂方法。没有 async/await 我的对象在 XAML 中实例化,如下所示:

<viewModel:MyClass x:key="myClass"/>

如果我使用静态工厂方法,调用它CreateAsync(),对象实例化代码如下:

MyClass myClass = await MyClass.CreateAsync();

在代码隐藏中一切都很好并且按预期工作,但如果可能的话,我希望 XAML 中的上述代码等效。快速搜索建议沿着以下行使用新属性 FactoryMethod 来指定工厂方法。

<viewModel:MyClass x:FactoryMethod="CreateAsync" x:key="myClass"/>

但是,要注意的是 x:FactoryMethod 仅在 XAML 2009 中受支持(而不是 XAML 2006)。此外,根据我的简短研究,尚不支持 XAML 2009。

那么,在给定静态工厂方法的情况下,如何实例化 XAML 中的对象(如上所示的简单示例)?考虑到 x:FactoryMethod 尚不可用,是否有解决方法?

您的问题的一个可能解决方案是使用 MVVM Light。

MVVM Light 真正需要的是它的 SimpleIoc class 和 this 功能。

通过使用这个,您可以构建一个与我所做的类似的 ViewModel 定位器 here,不同之处在于您将在注册 ViewModel 时传递您的工厂方法。 之后,你可以像我一样简单地绑定它 here.

这显然不是您想要做的,并且是一种解决方法,但是在处理 Windows 应用程序时使用 IoC 容器(和 MVVM Light 或类似工具包)无论如何都是很好的做法,而且您越早掌握它的诀窍,更好。 ;)