2011-12-13 2 views
0

Telerik의 RadGridView (Silverlight 버전)를 사용하여 복사 메커니즘을 구현하려고하지만 심각한 문제가 있습니다. 내 Datagrid는 ObservableCollection에 바인딩됩니다. 여기에 MyRow 클래스입니다 다음 MyRow 개체 값의 임의의 수를 보유 할 수 있기 때문에, 당신이 볼 수 있듯이Silverlight RadGrid 복사 작업이 바운드 값 대신 클래스 이름을 표시합니다.

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?>(); 
    } 
} 

, 열이 동적으로 생성되는 (그래서 컬럼의 수를 만들 수있을 것이다). 각 String에 대해 열은 ColumnNames에 생성되고 값은 매개 변수화 된 ValueConverter을 사용하여 바인딩됩니다.

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에 포함 된 이름 : 나는 (CTRL + C)을 복사 할 때

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); 
    } 
} 

그러나, 이것은 내가 무엇을 얻을 수 있습니다. 그 부분은 괜찮습니다. 그러나 데이터 (0.242524312와 같은 10 진수 값)를 얻지는 않지만 대신 클래스 이름을 얻습니다.

복사 작업이 클래스 이름 대신 MyRow 개체의 바운드 속성 값을 유지하도록하려면 어떻게해야합니까? (내부에있는 모든 것으로 ToString() 메서드를 호출합니다)?

(질문은 Telerik's forum에 게시 됨).

답변

0

문제는 바인딩이 그렇게 작동하지 않는다는 것입니다.

올바른 해결책은속성 Values에 바인딩 한 다음 ValueConverter (매개 변수 인덱스 별)에서 적절한 값을 추출하는 것입니다.

이 작동 (Binding와 루프 같은 변경) :

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

    Binding bnd = new Binding("Values"); 

    /* ... */ 
} 
관련 문제