Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9703

[WPF/xaml] ListViewをグループ表示する(xamlで書く)

$
0
0
やりたいこと Grid表示のListViewの中身を、ある列の内容でグループ表示したい。下記のようなイメージ。 やり方 <CollectionViewSource>を使う。 MainWindow.xaml <Window x:Class="WpfApp48.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp48" mc:Ignorable="d" Title="MainWindow" Height="300" Width="200"> <Window.Resources> <!-- 何のくくりでグループを作るか指定 --> <CollectionViewSource x:Key="cvSource" Source="{Binding DataList}" > <CollectionViewSource.GroupDescriptions> <PropertyGroupDescription PropertyName="PilotName"/> </CollectionViewSource.GroupDescriptions> </CollectionViewSource> <!-- グループのヘッダのスタイルを作成 --> <DataTemplate x:Key="GroupHeaderTemplate"> <Border Background="#FFCDF2CD"> <TextBlock Text="{Binding Name}" FontWeight="Bold"/> </Border> </DataTemplate> </Window.Resources> <Grid> <Grid.RowDefinitions> <RowDefinition Height="10*"/> <RowDefinition Height="1*"/> </Grid.RowDefinitions> <ListView Name="MainList" ItemsSource="{Binding Source={StaticResource cvSource}}"> <!-- グループのヘッダのスタイルを指定 --> <ListView.GroupStyle> <GroupStyle HeaderTemplate="{StaticResource GroupHeaderTemplate}" /> </ListView.GroupStyle> <ListView.View> <GridView> <GridViewColumn Header="機体" DisplayMemberBinding="{Binding MachineName}" Width="80" /> <GridViewColumn Header="パイロット" DisplayMemberBinding="{Binding PilotName}" Width="80" /> </GridView> </ListView.View> </ListView> <Button Grid.Row="1" Content="ボタン" Click="Button_Click"/> </Grid> </Window> MainWindow.xaml.cs using System; using System.Collections.ObjectModel; using System.ComponentModel; using System.Windows; using System.Windows.Data; namespace WpfApp48 { public partial class MainWindow : Window, INotifyPropertyChanged { #region INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName)=> this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); #endregion // ガンダム情報を格納 public ObservableCollection<MyData> DataList { get; set; } = new ObservableCollection<MyData>(); public MainWindow() { InitializeComponent(); this.DataContext = this; } // ボタンをおしたらデータの中身を追加 private void Button_Click(object sender, RoutedEventArgs e) { DataList.Add(new MyData() { MachineName = "ガンダム", PilotName = "アムロ" }); DataList.Add(new MyData() { MachineName = "シャアザク", PilotName = "シャア" }); DataList.Add(new MyData() { MachineName = "グフ", PilotName = "誰やったっけ?" }); DataList.Add(new MyData() { MachineName = "Zガンダム", PilotName = "カミーユ" }); DataList.Add(new MyData() { MachineName = "ガンダムmk-Ⅱ", PilotName = "アムロ" }); DataList.Add(new MyData() { MachineName = "ジ・オ", PilotName = "シロッコ" }); DataList.Add(new MyData() { MachineName = "百式", PilotName = "シャア" }); DataList.Add(new MyData() { MachineName = "ZZガンダム", PilotName = "ジュドー" }); DataList.Add(new MyData() { MachineName = "νガンダム", PilotName = "アムロ" }); } } /// <summary> /// ガンダム情報クラス /// </summary> public class MyData { public string MachineName { get; set; } public string PilotName { get; set; } } } 結果、最初に張り付けた画面のようになる。 参考 コードでやるやり方 xamlでやるやり方等

Viewing all articles
Browse latest Browse all 9703

Trending Articles