Для многомерных массивов может быть сложно получить доступ к свойству length
правого измерения. Возьмем следующий код, например:
int [][][] a = new int [2][3][4];
for(int i = 0; i < a.length; i++){
for(int j = 0; j < a[i].length; j++){
for(int k = 0; k < a[j].length; k++){
System.out.print(a[i][j][k]);
}
System.out.println();
}
System.out.println();
}
Каждое измерение имеет разную длину, поэтому тонкая ошибка заключается в том, что средняя и внутренняя петли используют свойство length
той же размерности (поскольку a[i].length
(f5)).
Вместо этого внутренний цикл должен использовать a[i][j].length
(или a[0][0].length
для простоты).
Насколько мне известно, единственный способ создать DataTemplate
в Silverlight - это использовать XamlReader . По сути, вы должны просто передать ему XAML в виде строки, и он вернет вам DataTemplate
. Решение Байрона применимо к WPF, но Silverlight (насколько мне известно) не поддерживает FrameworkElementFactory
.
Скотт Моррисон: Определение столбцов Silverlight DataGrid во время выполнения
Обратите внимание на вариант № 2 для DataGridTemplateColumn
.
Вы можете добавить элемент управления типа TextBlock
, используя FrameworkElementFactory
. Затем вы можете добавить TextBlock
в VisualTree DataTemplate
. Например:
//Create binding object and set as mode=oneway
Binding binding = new Binding();
binding.Path = new PropertyPath("SomePropertyPathName");
binding.Mode = BindingMode.OneWay;
//get textblock object from factory and set binding
FrameworkElementFactory textElement = new FrameworkElementFactory(typeof(TextBlock));
textElement.SetBinding(TextBlock.TextProperty, binding);
//apply textblock to datatemplate
dataTemplate.VisualTree = textElement;
У Microsoft есть хорошая статья на MSDN: "Data Templating Overview". Я бы начал с этого.
Update: Подумайте об этом. Я прочитал ваше требование "в коде". Я просто оставлю здесь ссылку для тех, кто может наткнуться на это сообщение.