代码之家  ›  专栏  ›  技术社区  ›  PandaWood

如何在XAML中注入转换器

  •  8
  • PandaWood  · 技术社区  · 17 年前

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

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

    因此,我的XAML包含一行如下内容:

    Source=“{Binding Path=CurrentMessage,Converter={StaticResource ImagePathConverter}”

    在哪里 图像路径转换器 将为我创建。

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

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

    没有代码隐藏 皮 并且不希望代码隐藏。所以我不能在类构造函数中设置类变量并引用它。也许这不合理,我还不确定。

    2 回复  |  直到 15 年前
        1
  •  9
  •   Tim Cooper    15 年前

    处理此问题的一种常见方法是将转换器也作为 MarkupExtension . 即:

    public class MyConverter : MarkupExtension, IValueConverter
    

    你的 ProvideValue()

    Source="{Binding CurrentMessage, Converter={local:MyConverter SomeParameterToConverter}}"
    

    这实际上与DI无关,但它确实满足了您消除代码落后的需求。我真的不明白在DI容器中注册转换器的意义。

        2
  •  0
  •   Community Mohan Dere    9 年前

    另一种方法是,通过 MarkupExtension 并在XAML中将其设置为转换器的属性。

    有关详细信息,请参见以下答案:

    https://stackoverflow.com/a/41611854/2115905

    推荐文章