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

本文关键字:转换 DataGrid 为什么 存在 | 更新日期: 2023-09-27 18:09:47

我有一个类MyClass,具有一个属性:MyPropertyClass类型的MyPropertyMyPropertyClassstring转化为implicit operator

现在我想在双向中从DataGridTextColumn绑定到该属性,但它不起作用。在我看来,它应该自动从string转换到MyPropertyClass,也可以转换回来(使用ToString方法)。

错误:

System.Windows。数据错误:1:无法创建默认的转换器到在类型之间执行"双向"转换。MyPropertyClass"和system . string’"。考虑使用绑定的Converter属性。BindingExpression:路径= MyProperty;DataItem = ' MyClass '(HashCode = 22558296);目标元素是'TextBox' (Name= ");目标属性为"Text"(类型为"String")

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

代码:

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>

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

您正在寻找一个TypeConverter。

  1. CodeProject上
  2. Wpf2000things