Изменение свойства TextBlock DataTemplate во время выполнения - PullRequest
0 голосов
/ 04 марта 2010

У меня есть DataTemplate, определенный следующим образом:

Я обращаюсь к нему во время выполнения, используя код ниже:

  else
                {
                    template = (DataTemplate)FindResource("GridViewTextBlockDataTemplate");

                    var textblock = (TextBlock) template.LoadContent();
                    textblock.Text = "bye";

                    //textblock.SetBinding(TextBlock.TextProperty, new Binding("[" + current.Key + "]"));
                }

                var column = new GridViewColumn
                                 {
                                     Header = current.Key,
                                     CellTemplate = template  
                                 };

                                gridView.Columns.Add(column);
            }

А теперь я хочу изменить свойство textblock на что-нибудь, как я могу это сделать? Всегда кажется пустым.

1 Ответ

2 голосов
/ 04 марта 2010

DataTemplate - это шаблон для создания контента. При вызове LoadContent для шаблона он создает содержимое, определенное этим шаблоном. Поэтому, когда вы вносите изменения в TextBlock, он применяется только к этому одному экземпляру контента, а не к самому DataTemplate.

Я предполагаю, что вам нужно сделать это, чтобы сгенерировать привязку на основе свойства, переданного функции. Вы можете сделать это, создав шаблон непосредственно в коде. Это намного сложнее понять, чем XAML, но это должно сработать:

    private DataTemplate GenerateTextBlockTemplate(string property)
    {
        FrameworkElementFactory factory = new FrameworkElementFactory(typeof(TextBlock));
        factory.SetBinding(TextBlock.TextProperty, new Binding(property));

        return new DataTemplate { VisualTree = factory };
    }
...