Tag: WPF/DataTemplate

目次

関連ページ

参考情報

ControlTemplateとDataTemplateの違いって

  • Difference between Control Template and DataTemplate in WPF - Stack Overflowによると、
    • DataTemplateは内部データのためのビジュアルレイアウトを提供し、ControlTemplateは内部データには慣用しないビジュアルレイアウトを提供する。
    • それゆえ、ControlTemplateはTemplateBindingだけを使う。DataTemplateは通常のバインディングを使う(ビジネス・ドメインオブジェクトと連携)といったことなのか。
    • カスタマイズされた汎用部品を作るときは、ControlTemplateを使い、何かのきっかけで見た目をかえたりするソフトごとの専用処理を行う場合DataTemplateということでいいのかな。

Tips

リストボックスの選択値に応じてペインを書き換える。

  • xaml - WPF: How to set the data template trigger for content control? - Stack Overflowが参考になる。
  • リストで"1"を選択したときは、"template1"が、"2"を選択したときは"template2"が使われるようなxaml
    <Window x:Class="ControlDemo.OtherDemo.ComboRelatedPane.ComboRelatedPaneWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="ComboRelatedPaneWindow" Height="300" Width="300">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <Grid.Resources>
                <DataTemplate x:Key="template1">
                    <TextBlock>template1</TextBlock></DataTemplate>
                <DataTemplate x:Key="template2">
                    <TextBlock>template2</TextBlock>
                </DataTemplate>
            </Grid.Resources>
            <StackPanel Orientation="Horizontal">
                <ComboBox HorizontalAlignment="Left" Width="200"
                                          ItemsSource="{Binding Path=PaneTypes}" 
                                          DisplayMemberPath="Label" 
                                          SelectedValuePath="Code"
                                          SelectedValue ="{Binding PaneTypeCode}"
                                          />
                
            </StackPanel>
            <ContentControl Grid.Row="1" Content="{Binding}">
                <ContentControl.Style>
                    <Style TargetType="ContentControl">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding PaneTypeCode}" Value="1">
                                <Setter Property="ContentTemplate" Value="{StaticResource template1}" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding PaneTypeCode}" Value="2">
                                <Setter Property="ContentTemplate" Value="{StaticResource template2}" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </ContentControl.Style>
            </ContentControl>
        </Grid>
    </Window>
    
  • c# - WPF How to access control from DataTemplate - Stack Overflowのようにコードビハインドで無理矢理する方法も覚えておいてもよいかも。

トラブルシューティング

DataTemplate内でバインディングできない。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-04-13 (水) 16:47:44