MarkupExtension.ProvideValue - 是否实际使用了IServiceProvider?

m-y*_*m-y 5 c# wpf markup-extensions ivalueconverter service-provider

我正在阅读我的一些旧代码并遇到了混合IValueConverter/ MarkupExtension类.这让我想知道如果IServiceProviderProvideValue方法实际上是有用的,以及它如何将有用吗?

我看到IServiceProvider只有一个方法:GetService必须转换为适当的服务类型.我还查看了MarkupExtension.ProvideValue MSDN页面,它列出了不同类型的服务.我想,我只是想知道这些服务是否有用,或者我应该保留我的方法呢?

现行方法:

public Object ProvideValue(IServiceProvider serviceProvider)
{
    return new MyConverter();
}
Run Code Online (Sandbox Code Playgroud)

基本上,我应该做以下事情:

public Object ProvideValue(IServiceProvider serviceProvider)
{
    var provider = serviceProvider as SomeType;

    if (provider == null) return new MyConverter();

    //Do something with the provider here?
}
Run Code Online (Sandbox Code Playgroud)

Fre*_*lad 11

例如,提供程序可用于获取有关其应用于的目标对象和属性的信息.如果您不需要知道这些值,则不需要使用它

public override object ProvideValue(IServiceProvider provider)
{
    IProvideValueTarget service = (IProvideValueTarget)provider.GetService(typeof(IProvideValueTarget));
    DependencyObject targetObject = service.TargetObject as DependencyObject;
    DependencyProperty targetProperty = service.TargetProperty as DependencyProperty;

    // ...
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*Jon 6

如果你的MarkupExtension作品没有与之相关的任何交互,IServiceProvider那么显然没有什么可以从访问它获得.我自己看过和写过的所有MarkupExtension/ ValueConverter组合也属于这一类.

从实际问题出发,如果您只是在寻找阅读材料,那么有关提供商可以提供哪些服务以及它们如何在这里发挥作用的更多信息.