2015-11-04 121 views
2

在构造函数中使用async/await的需求将导致我实例化对象的静态工厂方法。没有异步/等待我的目标是在XAML中实例化,像这样:如何使用工厂方法在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目前尚不可用,是否有解决方法?

+0

如果有更好的路线,我不会挂在异步构造函数上。我希望数据在绑定到数据对象时被初始化,并且初始化恰好(并且需要!)异步。从XAML内部完成所有工作将是理想的选择。我可以从ViewModel做到这一点,没问题,但认为全XAML解决方案,如果可能的话,在我看来,更优雅。我假设它应该可以在XAML中完成,但我可能是错的。 – user5525674

回答

1

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

MVVM Light实际需要的是SimpleIoc类和它的功能。

通过使用这一个,你可以建立一个类似的ViewModel定位器,我做了here,除非你在注册ViewModel时通过你的工厂方法。 之后,你可以像我一样here简单地绑定它。

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

+0

谢谢,会看看你的链接并回来。 – user5525674

相关问题