2011-09-14 50 views
5

我正在瀏覽我的一些舊代碼,並且遇到了一個混合類IValueConverter/MarkupExtension類。它讓我想知道ProvideValue方法中的IServiceProvider實際上是否有用,以及它如何有用?MarkupExtension.ProvideValue - IServiceProvider實際使用了嗎?

我看到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? 
} 

回答

6

如果您MarkupExtension作品不neeeding與IServiceProvider任何交互則顯然有什麼可以訪問它獲得。全部MarkupExtension/ValueConverter組合我自己看過和寫過的組合也屬於這一類。

從實際情況出發,如果您只是在尋找閱讀材料,那麼有關於提供商可以提供哪些服務以及它們可能如何有用的更多信息here

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; 

    // ... 
} 
相關問題