WPF DataGrid更改自动生成的列

时间:2017-09-10 08:10:22

标签: wpf mvvm

我有一个带有DataGrid的MVVM项目,它使用具有动态列数的DataTable。 这意味着DataGrid必须自动生成其列。 我想将一个生成的DataGridTextColumn(代码中的“Col B”,typeof(PKValue))更改为DataGridComboBoxColumn。 但我无法显示列的数据。

DataTable的创建方式如下:

A = [3, 4, 6, 5, 20, 18, 10, 30]
D = 50

# sort A and repeat 6 times
A = sorted(A * 6)
# create matrix M, where:
# 0 == uncomputed, 1 == True, -1 == False
arr1d = lambda x: [0] * x
arr2d = lambda x, y: [arr1d(y) for i in xrange(x)]
arr3d = lambda x, y, z: [arr2d(y, z) for i in xrange(x)]
M = arr3d(6 + 1, len(A), D + 1)


def fill_m(bills_num, start_pos, d):
    global A, M
    if d == 0:  # can make change for 0 only with 0 bills
        return True if bills_num == 0 else False
    if d < 0 or bills_num <= 0 or start_pos >= len(A):
        return False
    if M[bills_num][start_pos][d] == 0:
        # need to compute cell value
        if fill_m(bills_num, start_pos + 1, d):
            M[bills_num][start_pos][d] = 1
        elif fill_m(bills_num - 1, start_pos + 1, d - A[start_pos]):
            M[bills_num][start_pos][d] = 1
        else:
            M[bills_num][start_pos][d] = -1
    return M[bills_num][start_pos][d] == 1


print 'Can make change for $', D, fill_m(6, 0, D)

IDItem类:

while (i < this.ColumnsCount1)
{
    dataTable.Columns.Add(new DataColumn("Col A", typeof(bool)));
    i++;

    dataTable.Columns.Add(new DataColumn("Col B", typeof(PKValue)));
    i++;

    dataTable.Columns.Add(new DataColumn("Col C", typeof(string)));
    i++;
}

使用此代码 - DataGrid将“Col B”创建为DataGridTextColumn。 然后我使用此代码,尝试将自动生成的文本列更改为组合框列:

public class PKValue : ICloneable
{
    public object Clone()
    {
        return this.MemberwiseClone();
    }
    public int PK { get; set; }
    public string Value { get; set; }
}

DataGrid确实将“Col B”更改为DataGridComboBoxColumn而没有任何警告,正确显示ItemsSource,但它不显示该字段的现有值。 当我从下拉列表中选择一个项目时 - 它会发出警告“无法创建默认转换器来执行类型'WPFGridMatrix.Models.PKValue'和'System.String'”之间的'双向'转换。当我创建一个返回简单字符串“abc”的转换器时 - 仍然没有在列中显示任何内容。我的猜测是使用简单的“e.Column = dataGridComboBoxColumn;”是不够的,但如何正确地做到这一点?

0 个答案:

没有答案