WPF DataGrid 'CellFormatting Equivalent' - PullRequest
0 голосов
/ 13 апреля 2011

Я пытаюсь конвертировать из WinForms в WPF и немного борюсь с DataGridView -> WPF DataGrid.

У меня все данные красиво загружаются, просто застрял в форматировании ячейки.

Есть столбец с числами, однако, если число равно нулю, а не показывает 0, я бы хотел, чтобы он отображал NIL.

При использовании DataGridView ниже работает

    Private Sub SampleDGV_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles SampleDGV.CellFormatting

    Try
        If e.RowIndex >= 0 And e.ColumnIndex = SampleDGV.Columns(CostColumn.Name).Index Then
            If CDec(e.Value.ToString) = 0 Then
                e.Value = "NIL"
                e.FormattingApplied = True
            End If
        End If
    Catch ex As Exception

    End Try


End Sub

Но теперь я нахожусь в тупике по эквиваленту WPF

1 Ответ

0 голосов
/ 13 апреля 2011

Я не уверен, есть ли простой способ сделать это, я бы сделал это так, что, кажется, работает:

Определение настраиваемого столбца с настраиваемым конвертером:

<DataGrid.Resources>
    <local:ZeroToNilConverter x:Key="ZeroToNilConverter"/>
</DataGrid.Resources>
<DataGrid.Columns>
    <DataGridTextColumn Binding="{Binding Id, Converter={StaticResource ZeroToNilConverter}}" Header="Test"/>
</DataGrid.Columns>
//Sorry, i do not speak VB...
public class ZeroToNilConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        int input = 0;
        try
        {
            input = (int)value;
        }
        catch (Exception)
        {
            return value;
        }

        if (input == 0) return "NIL";
        else return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string input = value as string;
        if (input != null)
        {
            if (input == "NIL") return 0;
            else return value;
        }
        else
        {
            return value;
        }
    }
}
...