0


0

実行時にDataTemplate TextBlockプロパティを変更する

次のように定義された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 Answer


2


DataTemplateは、コンテンツを作成するためのテンプレートです。 テンプレートでLoadContentを呼び出すと、そのテンプレートで定義されたコンテンツが作成されます。 したがって、TextBlockに変更を加えた場合、その変更はコンテンツの1つのインスタンスにのみ適用され、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 };
    }