【问题标题】:How to instantiate an object in XAML with a factory method如何使用工厂方法在 XAML 中实例化对象
【发布时间】:2016-02-05 07:56:33
【问题描述】:

在构造函数中使用 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 中做到这一点,但我可能错了。

标签: c# xaml mvvm windows-runtime uwp


【解决方案1】:

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

MVVM Light 真正需要的是 SimpleIoc 类和它的this 函数。

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

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

【讨论】:

  • 谢谢,会看看你的链接,然后回来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多