WPF の DataTemplate を活用した MVVM パターンの実践
はじめに
業務でたまたま見ていて気になったので・・・
WPF (Windows Presentation Foundation) では、DataTemplate を活用することで、ViewModel のデータに応じて柔軟な UI を作成できます。本記事では、MVVM (Model-View-ViewModel) パターンを用いて、DataTemplate を使い分ける方法を解説します。
DataTemplate の基礎
DataTemplate とは、データをどのように表示するかを定義するテンプレートです。例えば、ListBox
のアイテムにカスタム UI を適用することができます。
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}" FontWeight="Bold" />
<TextBlock Text="{Binding Description}" FontStyle="Italic" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
DataTemplateSelector を使った UI の切り替え
DataTemplateSelector とは?
DataTemplateSelector
を使用すると、データの種類に応じて異なる DataTemplate
を動的に適用できます。たとえば、アイテムの種類によって表示を変えたい場合に便利です。
実装手順
1. ViewModel の定義
まず、異なる種類のデータを表す ViewModel を定義します。
public abstract class ItemViewModel {}
public class TextItemViewModel : ItemViewModel
{
public string Text { get; set; }
}
public class ImageItemViewModel : ItemViewModel
{
public string ImagePath { get; set; }
}
2. DataTemplateSelector の実装
次に、DataTemplateSelector を作成します。
public class ItemTemplateSelector : DataTemplateSelector
{
public DataTemplate TextTemplate { get; set; }
public DataTemplate ImageTemplate { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
return item switch
{
TextItemViewModel => TextTemplate,
ImageItemViewModel => ImageTemplate,
_ => base.SelectTemplate(item, container)
};
}
}
3. XAML で DataTemplateSelector を適用
XAML で DataTemplate を定義し、ItemTemplateSelector
を適用します。
<Window.Resources>
<DataTemplate x:Key="TextItemTemplate">
<TextBlock Text="{Binding Text}" Foreground="Blue" />
</DataTemplate>
<DataTemplate x:Key="ImageItemTemplate">
<Image Source="{Binding ImagePath}" Width="100" Height="100" />
</DataTemplate>
<local:ItemTemplateSelector x:Key="ItemSelector"
TextTemplate="{StaticResource TextItemTemplate}"
ImageTemplate="{StaticResource ImageItemTemplate}" />
</Window.Resources>
<ListBox ItemsSource="{Binding Items}" ItemTemplateSelector="{StaticResource ItemSelector}" />
まとめ
WPF の DataTemplate と DataTemplateSelector を組み合わせることで、MVVM パターンに沿った柔軟な UI の実装が可能になります。本記事では、異なる種類の ViewModel に基づいて UI を切り替える方法を解説しました。
これを応用すれば、リッチな UI を持つ WPF アプリケーションを効率的に開発できます!