ValueConverter в ResourceDictionary является Singleton? - PullRequest
0 голосов
/ 01 марта 2012

Если я добавлю ValueConverter, который определен в файле .cs, в ResourceDictionary и буду использовать его в качестве статического ресурса много раз, будет ли он создавать новые экземпляры или просто использовать один и тот же?

--------------------------------- 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>

1 Ответ

1 голос
/ 01 марта 2012

Это тот же экземпляр, добавление которого концептуально эквивалентно выполнению этого:

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

StaticResource затем просто ищет этот экземпляр с помощью ключа.

Однако вы можете использовать x:Shared, чтобы изменить это поведение, чтобы каждая ссылка создавала новый экземпляр.

...