c# - 如何使用工厂方法在 XAML 中实例化对象

标签 c# xaml mvvm windows-runtime uwp

在构造函数中使用 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/

相关文章:

c# - 在div或元素外部单击以在Blazor上将其关闭的事件

xaml - 如何在 XAML 中创建度数符号

c# - WPF Datagrid主详细信息MVVM

c# - 如何使用 DataAnnotations 检查 WPF 中是否存在有效数字

c# - MVVM WPF 按钮命令绑定(bind) - RelayCommand

c# - 使用 Microsoft Graph API 获取 Outlook 中的所有消息

c# - Visual Studio 2010 Silverlight 项目在浏览器中作为文件 ://instead of localhost://打开

c# - 以更高的权限启动进程并读取其输出

.net - 有没有办法将 Setter 元素放入 EventTrigger 中?

c# - 创建一个 TextBoxSearch 以从 ListView WPF 中筛选