如何在XAML中使用工厂方法实例化一个对象。

3

需要在构造函数中使用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,有没有解决办法呢?

如果有更好的方法,我不会仅仅为了使用异步构造函数而坚持使用它。我希望在绑定到数据对象时初始化数据,并且初始化过程是(并且需要是!)异步的。最理想的情况是从XAML中完成所有操作。我可以从ViewModel中完成这个任务,没有问题,但是我认为一个全XAML的解决方案更加优雅,如果可能的话。我假设可以在XAML中完成这个任务,但我可能错了。 - user5525674
1个回答

1

你的问题可能有一个解决方案,即使用MVVM Light。

实际上,你需要从MVVM Light中使用SimpleIoc类和其中的this函数。

通过使用这个函数,你可以构建一个类似于我在这里创建的ViewModel定位器,只是在注册ViewModel时要传递你的工厂方法。 之后,你可以像我在这里那样简单地绑定它。

显然这不是你想要做的,而是一个解决方法,但在处理Windows应用程序时使用IoC容器(以及MVVM Light或类似工具包)是一种好的实践,而且越早掌握它就越好。 ;)


谢谢,我会查看你提供的链接并回来。 - user5525674

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接