0

我想我的问题主题有点混乱。简而言之,我想要的是:

我的申请中有很多Converters。他们中的许多人没有实现该ConvertBack方法。所以我想要一个BaseConverter类,它提供一个简单的空实现ConvertBack以及我的所有其他转换器从BaseConverter.

我的想法BaseConverter

public class BaseConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // do nothing in this dummy implementation
        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // do nothing in this dummy implementation
        return null;
    }
}

还有我的一个疯狂转换器:

public class CrazyConverter : BaseConverter
{
    public new object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
       return ACrazyConverionOfTheValue(...);
    }
}

但是,如果我这样尝试并使用 my CrazyConverter,我总是ConvertBaseClass. 我的新Convert方法永远不会被调用。我究竟做错了什么?

感谢您的回复!

4

1 回答 1

3

您需要在基类中创建方法virtual,而您的子类应该override使用它们(而不是new)。

public class BaseConverter : IValueConverter
{
    public virtual object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // do nothing in this dummy implementation
        return null;
    }

    public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // do nothing in this dummy implementation
        return null;
    }
}

public class CrazyConverter : BaseConverter
{
    public override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
       return ACrazyConverionOfTheValue(...);
    }
}

编辑:您可能还需要考虑重构它以要求Convert通过创建类和Convert抽象来覆盖它,如下所示:

public abstract class BaseConverter : IValueConverter
{
    public abstract object Convert(object value, Type targetType, object parameter, CultureInfo culture);

    public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // do nothing in this dummy implementation
        return null;
    }
}
于 2013-02-11T18:39:04.013 回答