为什么没有为DataGrid自动生成的列调用IValueConverter

时间:2014-01-20 08:59:14

标签: wpf datagrid ivalueconverter

在自动生成的数据网格列中,我想用空格替换某个值(-1)。

我创建了一个IValueConverter:

<ValueConversion(GetType(DataRowView), GetType(String))>
Public Class UsageConversion
    Implements IValueConverter

    Public Function Convert(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
        Dim model As ProgModel = DirectCast(value, ProgModel)
        If model.Usage = -1 Then
            Return ""
        Else
            Return model.Usage.ToString
        End If
    End Function

    Public Function ConvertBack(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
        Return Nothing
    End Function
End Class

并将其绑定到OnAutoGeneratingColumn方法:

        Dim dgtc As DataGridTextColumn = TryCast(e.Column, DataGridTextColumn)
        If dgtc IsNot Nothing Then 
                Dim UsageBinding = New Binding()
                UsageBinding.Converter = New UsageConversion
                Dim tbStyle As New Style
                tbStyle.TargetType = GetType(TextBlock)
                tbStyle.Setters.Add(New Setter(TextBlock.TextProperty, UsageBinding))
                dgtc.ElementStyle = tbStyle
        End If 

OnAutoGeneratingColumn运行良好,但转换代码不运行 - 在其中设置断点显示它永远不会被调用。

任何想法为什么?

我正在使用.Net 4.0

谢谢!

2 个答案:

答案 0 :(得分:2)

我不确定您为什么要在Binding上设置此ElementStyle ...当然,您只想在整个列上设置Binding:< / p>

    Dim dgtc As DataGridTextColumn = TryCast(e.Column, DataGridTextColumn)
    If dgtc IsNot Nothing Then 
            Dim UsageBinding = New Binding()
            UsageBinding.Converter = New UsageConversion
            dgtc.Binding = UsageBinding

答案 1 :(得分:0)

我猜你必须设置UsageBinding.Path属性

它没有设置Binding.Path属性,因此您将其绑定为空 这就是为什么转换器没有价值

的原因

试试这个

Dim UsageBinding = New Binding(e.PropertyName)
UsageBinding.Converter = New UsageConversion
dgtc.Binding=UsageBinding