Операция копирования Silverlight RadGrid показывает имя класса вместо связанного значения - PullRequest
0 голосов
/ 13 декабря 2011

Я пытаюсь реализовать механизм копирования с помощью Telerik RadGridView (версия Silverlight), но у меня есть серьезная проблема. Моя таблица данных связана с коллекцией ObservableCollection. Вот класс MyRow:

public class MyRow  
{ 
    public List<string> ColumnNames { get; set; } 
    public List<decimal?> Values { get; set; } 

    public String TimeStamp { get; set; } 

    public MyRow() 
    { 
        ColumnNames = new List<string>(); 
        Values = new List<decimal?>(); 
    } 
}

Как видите, столбцы создаются динамически, потому что объект MyRow может содержать произвольное количество значений (так, чтобы количество столбцов должно было быть сделано). Столбцы создаются для каждого String в ColumnNames, а значения связываются с помощью параметризованного ValueConverter.

private void createColumns(ObservableCollection<MyRow> values) 
{ 
    while (dataGrid.Columns.Count > 1) 
        dataGrid.Columns.RemoveAt(1); 

    dataGrid.Columns[0].Header = CommonStrings.TimeStamp; 
    int columnCount = values.First().ColumnNames.Count; 

    for (int i = 0; i < columnCount; i++) 
    { 
        GridViewDataColumn col = new GridViewDataColumn(); 
        col.Header = values.First().ColumnNames[i]; 
        col.DataType = typeof(MyRow); 
        Binding bnd = new Binding(); 
        bnd.Converter = new MyRowCollectionConverter(); 
        bnd.ConverterParameter = i; 
        col.DataMemberBinding = bnd; 
        dataGrid.Columns.Add(col); 
    } 
}

Однако, когда я пытаюсь скопировать (CTRL + C), я получаю следующее:

TimeStamp               Value1 
12.12.2011. 9:51:59     MyProject.MyRow 
12.12.2011. 9:52:59     MyProject.MyRow 
12.12.2011. 9:53:59     MyProject.MyRow 
12.12.2011. 9:54:59     MyProject.MyRow

Значение1 - это имя, содержащееся в List<String> ColumnNames. Эта часть в порядке. Однако я не получаю данные (которые являются десятичными значениями, например, 0,242524312), но вместо этого я получаю имя класса.

Что я могу сделать, чтобы операция копирования сохранила значения в свойстве bound объекта MyRow вместо имени его класса (я полагаю, он вызывает метод ToString () для всего, что находится внутри)?

(Вопрос также размещен на форуме Telerik ).

1 Ответ

0 голосов
/ 20 декабря 2011

Проблема в том, что привязка не работает таким образом.

Правильным решением является привязка к свойству MyRow Values, а затем извлечение соответствующего значения в ValueConverter (индекс параметра).

Это работает (то же самое для цикла с измененным Binding):

for (int i = 0; i < columnCount; i++) 
{ 
    /* ... */

    Binding bnd = new Binding("Values"); 

    /* ... */
} 
...