6

私は自分の古いコードを調べていて、ハイブリッドIValueConverter/MarkupExtensionクラスに出くわしました。メソッドの が実際に役立つのか、どのように役立つのか疑問に思いIServiceProviderました。ProvideValue

IServiceProviderメソッドが 1 つしかないことがわかります: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?
}
4

2 に答える 2

16

プロバイダーは、たとえば、適用されているターゲット オブジェクトとプロパティに関する情報を取得するのに役立ちます。これらの値を知る必要がない場合は、使用する必要はありません

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;

    // ...
}
于 2011-09-14T22:36:45.220 に答える
6

MarkupExtensionとの対話を必要とせずに機能する場合IServiceProvider、アクセスしても何も得られないことは明らかです。私が見たり自分で書いたりしたMarkupExtension/コンボもすべてこのカテゴリに分類されます。ValueConverter

実用的な問題から移ると、読み物だけを探している場合は、プロバイダーが利用できるサービスと、それらがどのように役立つかについての詳細情報がここにあります.

于 2011-09-14T22:07:22.207 に答える