为什么存在隐式转换时 class 不在 DataGrid 中自动转换?
Why isn't a class converted automatically in DataGrid when implicit conversion exists?
我有一个 class MyClass
和一个 属性: MyProperty
类型 MyPropertyClass
。 MyPropertyClass
有 implicit 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
。但这样做是多余的,因为我只会使用从 string
到 MyPropertyClass
的 implicit conversion
和 ToString
方法。
代码:
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>
我有一个 class MyClass
和一个 属性: MyProperty
类型 MyPropertyClass
。 MyPropertyClass
有 implicit 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
。但这样做是多余的,因为我只会使用从 string
到 MyPropertyClass
的 implicit conversion
和 ToString
方法。
代码:
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>