none
DataTemplateで用意したコントロールに値をいれたい RRS feed

  • 質問

  • お世話になります。

    ・visual studio 2010 ・Microsoft Expression Blend 4  ・C# ・wpf

    で作成しております。

     

    タブコントロールの中に、TextBlockを表示するために、xamlでDataTemplateを使用しています。

    C#側で、DataTemplate内の"これに値をいれたい"に文字を挿入したいのですが、

    エラーが出ます。

    大変お手数で申し訳ございませんが、どのようにすれば、DataTemplate内のTextBlockコントロールに

    値をいれることができますでしょうか?

     

    ---------------xaml--------------------

    <TabControl>

     <TabControl.ContentTemplate>
      <DataTemplate>
        <StackPanel Orientation="Horizontal">
         <TextBlock Name="これに値をいれたい" />
        </StackPanel>
      </DataTemplate>
     </TabControl.ContentTemplate>

    </TabControl>

     

    ---------------C#-----------------

    xamTabControl1.Template("これに値をいれたい")="aaaa";
    ※エラーがでます。

    -----------------------------------

    2011年5月19日 10:09

回答

  • こんにちは。

    ちょっと技術レベルがわからないので、どの程度説明すればよいか迷ってます。
    Bindに関してはおわかりですか?

    おわかりの場合、

    >C#側(実行された時に)で挿入したいと思っているのです。
    >また、C#側では、どのように指定したらよいのでしょうか?※どのように指定すれば、hogePropertyに値を挿入できるのかわかりませんでした。。。

    の答えは、

    hogePropertyをC#のクラスのプロパティとして記述し、
    C#側で実行された時に(好きなときに)、C#のクラスのhogePropertyに値をセットすれば、
    自動的に画面にその値がセットされます。

    というものになると思います。
    わからない場合は再質問ください。

    よろしくお願い致します。
    2011年5月20日 11:14

すべての返信

  • こんにちは。

    それだとビルドすら通らないですよね。

    DataTemplateはその名の通り、何かのデータを表示するためのテンプレート(鋳型)ですので、
    データを表示させる時に直接DataTemplateを弄るべきものではありません。

    スクリーンに映し出されたプレゼン資料を修正しようとして、直接スクリーンにマジックで書いたり、プロジェクタのレンズを弄ったりする人はいないですよね?
    多くの人はパワーポイントの方を修正すると思います。

    それとおなじで、DataTemplateに何かを表示させたいときは
    Binding」キーワードを使って元データの場所を指定し、
    表示内容を変えたい場合は元データの方を変更します。

    この場合だと、

     

        <!--タブのItemsSourceに表示させたいデータを指定する-->
        <TabControl ItemsSource="{Binding hogehogeItems}">
          <TabControl.ContentTemplate>
            <DataTemplate>
              <StackPanel>
                <!--Textプロパティに、表示させたいプロパティを指定する-->
                <TextBlock Text="{Binding hogeProperty}" />          
              </StackPanel>        
            </DataTemplate>
          </TabControl.ContentTemplate>
        </TabControl>
    

     

    こんな感じになるかと思います。

    あとは、バインドしたhogePropertyに値を入れれば表示されるという寸法です。


    DataTemplateについて、ここにわかりやすく書いてありますので見てくださいね。
    ■データ テンプレートの概要
    http://msdn.microsoft.com/ja-jp/library/ms742521.aspx

    以上、がんばってください。

    2011年5月19日 13:02
  • 大変初歩的な質問に丁寧に答えて頂きありがとうございます。

    教えて頂きました

    <TabControl ItemsSource="{Binding hogehogeItems}"> <TabControl.ContentTemplate> <DataTemplate> <StackPanel> <!--Textプロパティに、表示させたいプロパティを指定する--> <TextBlock Text="{Binding hogeProperty}" /> </StackPanel> </DataTemplate> </TabControl.ContentTemplate> </TabControl>

    ですが、xaml側で"hogeProperty"を指定して挿入するのではなく

    C#側(実行された時に)で挿入したいと思っているのです。


    その場合、この方法で可能でしょうか?

    また、C#側では、どのように指定したらよいのでしょうか?※どのように指定すれば、hogePropertyに値を挿入できるのかわかりませんでした。。。

    大変お手数ですがよろしくお願い致します。



    2011年5月20日 1:48
  • こんにちは。

    ちょっと技術レベルがわからないので、どの程度説明すればよいか迷ってます。
    Bindに関してはおわかりですか?

    おわかりの場合、

    >C#側(実行された時に)で挿入したいと思っているのです。
    >また、C#側では、どのように指定したらよいのでしょうか?※どのように指定すれば、hogePropertyに値を挿入できるのかわかりませんでした。。。

    の答えは、

    hogePropertyをC#のクラスのプロパティとして記述し、
    C#側で実行された時に(好きなときに)、C#のクラスのhogePropertyに値をセットすれば、
    自動的に画面にその値がセットされます。

    というものになると思います。
    わからない場合は再質問ください。

    よろしくお願い致します。
    2011年5月20日 11:14