在构造函数中使用 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 类和 this它的功能。
通过使用这个,您可以构建一个与我所做的类似的 ViewModel 定位器 here ,除非您在注册 ViewModel 时传递工厂方法。 之后,你可以像我一样简单地绑定(bind)它 here .
这显然不是您想要做的,并且是一种解决方法,但是在处理 Windows 应用程序时使用 IoC 容器(和 MVVM Light 或类似的工具包)无论如何都是很好的做法,而且您越早掌握它的诀窍,更好。 ;)
关于c# - 如何使用工厂方法在 XAML 中实例化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33528350/