2013-12-11 44 views
1

簡單問題:.NET WPF的IValueConverter構造

爲什麼我必須有一個IValueConverter一個constructor

我不是問,爲什麼我必須有一個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