我正在查看我的一些旧代码并遇到了混合IValueConverter
/ MarkupExtension
类。它让我想知道IServiceProvider
方法中的ProvideValue
是否真的有用,以及它如何有用?
我看到IServiceProvider
只有一个方法:GetService
,必须转换为正确的服务类型。我还查看了MarkupExtension.ProvideValue MSDN页面,它列出了不同类型的服务。我想,我只是想知道这些服务是否有用,或者我应该保留我的方法呢?
当前方法:
public Object ProvideValue(IServiceProvider serviceProvider)
{
return new MyConverter();
}
基本上,我应该做以下事情:
public Object ProvideValue(IServiceProvider serviceProvider)
{
var provider = serviceProvider as SomeType;
if (provider == null) return new MyConverter();
//Do something with the provider here?
}
答案 0 :(得分: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;
// ...
}
答案 1 :(得分:6)
如果您的MarkupExtension
无法与IServiceProvider
进行任何互动,那么显然无法获取任何内容。我自己看过和写过的所有MarkupExtension
/ ValueConverter
组合也属于这一类。
从实际问题开始,如果您只是在寻找阅读材料,那么有关提供商可以提供哪些服务以及它们如何有用的更多信息here。