2012-03-01 10 views
0

ResourceDictionaryに.csファイルで定義されたValueConverterを追加し、それを何度も静的リソースとして使用すると、新しいインスタンスが作成されるのでしょうか、それとも同じものを使用するのでしょうか?ResourceDictionaryのValueConverterはシングルトンですか?

--------------------------------- ValueConverterDefinition ------------ -------------------

internal class DateTimeConverter : IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var date = (DateTime)value; 
     return date.Day; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

------------------------ --------- ResourceDictionary -------------------------------

<converter:DateTimeConverter x:Key="DateTimeConverter"></converter:DateTimeToSpecificFormatConverter> 
<Style x:Key="ToolTipStyle" TargetType="{x:Type ToolTip}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ToolTip"> 
       <Border> 
        <Grid>       
         <TextBlock Foreground="Black"> 
         <TextBlock.Text> 
          <Binding Path="StartDate" Converter="{StaticResource DateTimeConverter}"></Binding> 
         </TextBlock.Text> 
         </TextBlock> 
         <TextBlock Foreground="Black"> 
         <TextBlock.Text> 
          <Binding Path="EndDate" Converter="{StaticResource DateTimeConverter}"></Binding> 
         </TextBlock.Text> 
         </TextBlock> 
        </Grid> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

ここでは、通常、静的インスタンスを含む特定のデザインパターンを参照するので、ここではシングルトンについては言及しないと思います。 –

答えて

1

同じインスタンスを追加することは概念的にはこれを行うことと同じです:

var converter = new DateTimeConverter(); 
control.Resources.Add("Key", converter); 

StaticResourceは、そのインスタンスをキーで検索します。

しかし、すべての参照で新しいインスタンスが作成されるように、その動作を変更するにはx:Sharedを使用できます。

+0

ありがとう、HB!ResourceDictionaryが定義されているセクションに関連していますか?App.Resourcesの場合は、アプリケーション全体がビルドされたときにのみ作成されますが、UserControl.Resourceの場合、各UserControlインスタンスは正しいですか? – Claw

+0

@PekingOperaInAlaska:はい、それは正しいです(あなたがそのUserControlのインスタンスではなく、宣言のリソースについて話している場合) –

関連する問題