gpt4 book ai didi

wpf - 如何在 XAML 中注入(inject)转换器

转载 作者:行者123 更新时间:2023-12-04 07:30:25 24 4
gpt4 key购买 nike

我有一个 IValueConverter 实现类,我需要使用我的 DI 容器(Ninject)注入(inject)它。

问题是,在 XAML 中,没有直接明显的方法来控制 Converter 对象的实例化。

所以我的 XAML 包含这样的一行:

Source="{Binding Path=CurrentMessage, Converter={StaticResource ImagePathConverter}}"



在哪里,将为我创建 ImagePathConverter。

我想我可以创建一个“服务定位器”静态类并调用它来解决我的依赖关系并将 StaticResource 更改为属性“MyServiceLocator.TheImageConverter”,但这让我想呕吐。

我希望这个问题可以用一些专门针对所提供代码的代码片段来回答——也许还有一个示例的支持链接。不仅仅是建议去某个地方看看。

此外,非常重要的是,假设 XAML 没有代码隐藏 - 我不能用一个。我正在创建一个皮肤,不希望后面有代码。所以我不能在类构造函数中设置类变量并引用它。也许这是不合理的,我还不确定。

最佳答案

处理此问题的常用方法是让您的转换器也成为 MarkupExtension .那是:

public class MyConverter : MarkupExtension, IValueConverter

您的 ProvideValue()方法可以返回转换器的实例,从而允许您像这样使用它:
Source="{Binding CurrentMessage, Converter={local:MyConverter SomeParameterToConverter}}"

这实际上与 DI 没有任何关系,但它确实满足了您消除背后代码的要求。我真的看不出将转换器注册到您的 DI 容器中的意义。

关于wpf - 如何在 XAML 中注入(inject)转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/900825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com