2009-03-25 2 views
2

У меня есть список массив строк в качестве входных данных. Размер массива является статическим для всего списка, но я не могу знать размер массива до тех пор, пока список не будет восстановлен. Мне нужно связать список в datagrid в Silverlight.Array binding Xaml by Position on Datagrid

Я попытался создать столбцы во время выполнения, привязывая каждый столбец к определенной позиции массива, но не могу найти способ.

Вы знаете, как это сделать?

Я мог бы в конечном итоге «преобразовать» мой список массивов во что-нибудь еще, что может быть привязано в datagrid?

Идея состоит в том, чтобы иметь вид 2d матрицы, показанный внутри datagrid в Silverlight (я думаю, что проблема аналогична).

Список

column_1  column_2  column_3 .. column_m 

string[1,1] string[1,2] string[1,3] .. string[1,m] 
string[2,1] string[2,2] string[2,3] .. string[2,m] 
string[3,1] string[3,2] string[3,3] .. string[3,m] 
.... 
string[n,1] string[n,2] string[n,3] .. string[n,m] 

п список Длина, м составляет список столбцов максимальное число.

Любая идея ценится

ответ

1

К сожалению, это не собирается быть легким.

Есть ли у вас какие-либо допустимые ограничения, например максимальное количество разрешенных столбцов или что-то в этом роде? Если вы (скажем, у вас есть N максимум столбца), Вы могли бы быть в состоянии сделать что-то

  1. Имея класс, который предоставляет N свойства (названные Col1 ... ColN для примера), отображающих содержание массива для одной строки в колонке X
  2. Создание списка этого класса, один экземпляр для каждой строки
  3. Генерация правильного количества колонки на лету, связывающую каждый столбец собственности ColX
  4. Привязка вашего DataGrid к этому списку

Это вроде некрасиво, но это будет работать.

Если вам не нужно полагаться на DataGrid, существует возможность использования UniformGrid. UniformGrid - это панель, которая раскладывает свои дочерние элементы в регулярной сетке (каждый элемент имеет одинаковую ширину, каждый элемент имеет ту же высоту). Вы можете указать количество столбцов во время выполнения, и панель будет соответствовать детям один за другим до количества столбцов, а затем продолжить в другой строке. Вы можете связать элемент ItemsControl с вашим массивом, указав, что он должен использовать UniformGrid в качестве панели макета и указывать подходящую ItemTemplate для визуализации каждой строки.

Второй вариант намного проще, но у вас не будет возможностей DataGrid, таких как сортировка, перемещение столбцов, выбор строк, изменение событий в строке и т. Д.

+0

Спасибо, Андер меня. Я попытаюсь использовать первый. К сожалению, мне нужно встроенное поведение datagrid. Я также нашел еще один ответ на мой вопрос: http://silverlight.net/forums/t/13083.aspx. Еще раз спасибо – krumikaze

2

Я нашел два решения проблемы, которые используют схему в ответ на Дениса:

  • первым, чтобы использовать отражение для создания класса во время выполнения для связывания, как предложено в this article (спасибо Владимиру Бодурову). Я протестировал это решение, и я попытаюсь использовать его в своем проекте. Единственная проблема прямо сейчас в том, что для большой коллекции производительность низкая. Но я надеюсь, что кто-то исправит это в следующем relese (Silverlight 3, похоже, не исправил эту проблему, пока)

  • второе решение будет использовать некоторый динамический язык для генерации данных. Я не знаю, может ли это быть быстрее или нет (возможно, нет), но в конце концов может помочь. Я буду пытаться в будущем и использовать ironpython или ruby ​​для создания классов, которые будут привязаны в datagrid.

Если кто-то попробовал использовать второе решение или любую связанную с производительностью информацию о создании классов во время выполнения, это будет оценено.

Giorgio

+0

Эта статья Владимира является * удивительным * ... то, что нужно для [SQL в Silverlight] http://conceptdevelopment.net/Silverlight2/SharpSql02/default.html мне пришлось обновить код для Владимира общий словарь <строка, строка> размещен здесь http://conceptdevelopment.net/Silverlight2/SharpSql02/DataSourceCreator.cs.html – Conceptdev

 Смежные вопросы

  • Нет связанных вопросов^_^