2013-12-11 2 views
1

Простой вопрос:.net WPF IValueConverter Конструктор

Почему я должен иметь constructor для IValueConverter?

Я не спрашиваю, почему у меня должен быть empty constructor, я спрашиваю, почему я должен иметь его вообще?

Если у меня есть:

public class PauseButtonValueConverter : MarkupExtension, IValueConverter 
{ 
    //public PauseButtonValueConverter() //<- Uncomment this and the error is fixed 
    //{ 
    //} 

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

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

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
    return this; 
    } 
} 

Тогда мой VS2012 дает мне ошибку времени компиляции: No constructor for type 'PauseButtonValueConverter' has 0 parameters.

Если я добавляю constructor, ошибка исправлена.

ответ

5

Это потому, что вы получаете от MarkupExtension, constructor, для которого он защищен. В этом случае компилятор не создает автоматическое создание конструктора по умолчанию. Вы должны добавить его сами.

В большинстве случаев вам не нужно выводить из MarkupExtension при создании конвертера значений. Я предполагаю, что у вас есть причина для этого, но если нет, просто удалите базовый класс.

+0

@ MichaelGunter- Это имеет смысл ... Я не думал о том, что конструктор по умолчанию не будет создан ПОТОМУ ЧТО мой базовый класс. – Andrew

Смежные вопросы