Как определить DataTemplate в коде?

Для многомерных массивов может быть сложно получить доступ к свойству 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 для простоты).

14
задан Dave Clemmer 26 March 2013 в 20:39
поделиться

3 ответа

Насколько мне известно, единственный способ создать DataTemplate в Silverlight - это использовать XamlReader . По сути, вы должны просто передать ему XAML в виде строки, и он вернет вам DataTemplate . Решение Байрона применимо к WPF, но Silverlight (насколько мне известно) не поддерживает FrameworkElementFactory .

Скотт Моррисон: Определение столбцов Silverlight DataGrid во время выполнения

Обратите внимание на вариант № 2 для DataGridTemplateColumn .

9
ответ дан 1 December 2019 в 14:21
поделиться

Вы можете добавить элемент управления типа 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;
4
ответ дан 1 December 2019 в 14:21
поделиться

У Microsoft есть хорошая статья на MSDN: "Data Templating Overview". Я бы начал с этого.

Update: Подумайте об этом. Я прочитал ваше требование "в коде". Я просто оставлю здесь ссылку для тех, кто может наткнуться на это сообщение.

1
ответ дан 1 December 2019 в 14:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: