0

Telerik の RadGridView (Silverlight バージョン) でコピー メカニズムを実装しようとしていますが、深刻な問題があります。私の Datagrid は 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

Value1 は、に含まれる名前List<String> ColumnNamesです。その部分は大丈夫です。ただし、データ (0.242524312 などの 10 進数値) は取得しませんが、代わりにクラス名を取得します。

コピー操作で、クラス名ではなく MyRow オブジェクトのバインドされたプロパティの値を保持するにはどうすればよいですか (内部にあるもので ToString() メソッドを呼び出すと思います)。

(質問はTelerikのフォーラムにも投稿されました)。

4

1 に答える 1

0

問題は、バインディングがそのように機能しないことです。

MyRow適切な解決策は、プロパティにバインドし、 (パラメーター インデックスによって)Valuesで適切な値を抽出することです。ValueConverter

これは機能します (変更された for ループと同じBinding):

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

    Binding bnd = new Binding("Values"); 

    /* ... */
} 
于 2011-12-20T12:11:12.327 に答える