为什么存在隐式转换时 class 不在 DataGrid 中自动转换?

Why isn't a class converted automatically in DataGrid when implicit conversion exists?

我有一个 class MyClass 和一个 属性: MyProperty 类型 MyPropertyClassMyPropertyClassimplicit operator 用于从 string.

转换

现在我想通过双向DataGridTextColumn绑定到那个属性,但它不起作用。在我看来,它应该自动从 string 转换为 MyPropertyClass 并返回(使用 ToString 方法)。

错误:

System.Windows.Data Error: 1 : Cannot create default converter to perform 'two-way' conversions between types 'Test.MyPropertyClass' and 'System.String'. Consider using Converter property of Binding. BindingExpression:Path=MyProperty; DataItem='MyClass' (HashCode=22558296); target element is 'TextBox' (Name=''); target property is 'Text' (type 'String')

我知道我可以像上面的错误描述那样定义一个 Converter。但这样做是多余的,因为我只会使用从 stringMyPropertyClassimplicit conversionToString 方法。

代码:

class MyClass
{
    public MyPropertyClass MyProperty { get; set; }
}

class MyPropertyClass
{
    private string value;

    public override string ToString()
    {
        return value;
    }

    public static implicit operator MyPropertyClass(string s)
    {
        MyPropertyClass mc = new MyPropertyClass();
        mc.value = s;
        return mc;
    }
}

XAML:

<DataGrid ItemsSource="{Binding List,Mode=OneWay}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="My Property" Binding="{Binding MyProperty,Mode=TwoWay}" />
    </DataGrid.Columns>
</DataGrid>

您正在寻找 TypeConverter

  1. CodeProject
  2. Wpf2000things