了解System.Windows.Data错误:23:无法转换

时间:2014-01-17 19:34:15

标签: wpf converter implicit-conversion

我已经很难理解这个错误一段时间了,现在它终于打破了一些东西。这是我正在做的一个愚蠢的草图:

我的datawrapper类:

class DummyWrapper<T> : INotifyPropertyChanged
{
    public DummyWrapper() { }

    private T _data;
    public T Data
    {
        get { return _data; }
        set
        {
            _data = value;
            Notify("Data");
        }
    }

    public static implicit operator T(DummyWrapper<T> d)
    {
        return d._data;
    }

    ...
}

我的XAML:

<DockPanel>
    <ContentPresenter Name="cp" Visibility="Collapsed"/>
    <Rectangle Name="foo" Fill="{Binding ElementName=cp, Path=Content}" Height="50" Width="50"/>
</DockPanel>

我的代码隐藏的相关部分:

DummyWrapper<Brush> dw = new DummyWrapper<Brush>(new SolidColorBrush((Color)ColorConverter.ConvertFromString("Red")));
cp.Content = dw;

当然如果这一切都按照我预期的方式工作,我就不会在这里。输出窗口显示了这个:

System.Windows.Data Error: 23 : Cannot convert 'WpfTestApplication.DummyWrapper`1[System.Windows.Media.Brush]' 
from type 'DummyWrapper`1' to type 'System.Windows.Media.Brush' 
for 'en-US' culture with default conversions; consider using Converter property of Binding.

......它在那段时间里继续发展。

在这种情况下,我能做些什么来允许我的DummyWrapper自动转换(即没有在绑定中提供转换器)?

1 个答案:

答案 0 :(得分:1)

将您的代码行更改为

var solidColorBrush = new SolidColorBrush((Color) ColorConverter.ConvertFromString("Red"));
DummyWrapper<Brush> dw = new DummyWrapper<Brush>(solidColorBrush);
cp.Content = (Brush)dw;

您不希望使用converters那么好。 Content是一个对象,除非Content的类型为Brush,否则执行隐式运算符不会这样做。您必须明确地将其强制转换为Brush

  

System.Object是Content属性的类型。   通过继承,已经有一个隐含的转换为基础   型