Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
WPF勉強会 第3回 コレクションへのデータバインディング/WPFStudy3
Search
hachiilcane
March 01, 2022
Programming
0
97
WPF勉強会 第3回 コレクションへのデータバインディング/WPFStudy3
WPF勉強会 第3回 コレクションへのデータバインディング
説明後に実演するライブコーディングのコードはこちら。
https://github.com/hachiilcane/WpfStudy
hachiilcane
March 01, 2022
Tweet
Share
More Decks by hachiilcane
See All by hachiilcane
機械学習勉強会01 1次関数での回帰分析/MLStudy01
hachiilcane
0
58
機械学習勉強会02 多項式近似と最小二乗法による推定/MLStudy02
hachiilcane
0
72
機械学習勉強会03 最急降下法/MLStudy03
hachiilcane
0
33
機械学習勉強会04 偏微分と連鎖律/MLStudy04
hachiilcane
0
39
機械学習勉強会05 パーセプトロン/MLStudy05
hachiilcane
0
36
機械学習勉強会06 ロジスティック回帰/MLStudy06
hachiilcane
0
55
機械学習勉強会07 ROC曲線/MLStudy07
hachiilcane
0
37
機械学習勉強会08 2次元入力3クラス分類/MLStudy08
hachiilcane
0
65
機械学習勉強会09 2層フィードフォワードニューラルネット/MLStudy09
hachiilcane
0
67
Other Decks in Programming
See All in Programming
なぜあなたのオブザーバビリティ導入は頓挫するのか
ryota_hnk
4
530
코딩 에이전트 체크리스트: Claude Code ver.
nacyot
0
1k
iOS開発スターターキットの作り方
akidon0000
0
230
What's new in AppKit on macOS 26
1024jp
0
180
What's new in Adaptive Android development
fornewid
0
130
React は次の10年を生き残れるか:3つのトレンドから考える
oukayuka
41
16k
新しいモバイルアプリ勉強会(仮)について
uetyo
1
230
[SRE NEXT] 複雑なシステムにおけるUser Journey SLOの導入
yakenji
1
860
Jakarta EE Meets AI
ivargrimstad
0
480
オンコール⼊⾨〜ページャーが鳴る前に、あなたが備えられること〜 / Before The Pager Rings
yktakaha4
2
1.2k
コーディングエージェント概観(2025/07)
itsuki_t88
0
460
Bedrock AgentCore ObservabilityによるAIエージェントの運用
licux
8
470
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.5k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Designing for Performance
lara
610
69k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.2k
Fireside Chat
paigeccino
37
3.6k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
Transcript
WPFษڧձ ୈ̏ճ ίϨΫγϣϯͷ σʔλόΠϯσΟϯά
ࠓ֮͑ͯ΄͍͜͠ͱ ItemsSourceΛ࣋ͭίϯτϩʔϧ͕ίϨΫ γϣϯΛѻ͑Δ ObservableCollection<T>ɺͱʹ͔ͬ͘ ͱ͚ ίϨΫγϣϯͷཁૉͷݟͤํΛܾΊΔͷ ͕DataTemplete
σʔλόΠϯσΟϯά ͬ͘͟Γ̎ύλʔϯ Ұͭͷʹରͯ͠ ίϨΫγϣϯʹରͯ͠ ࠓճͬͪ͜
͍ͭίϨΫγϣϯͷόΠ ϯσΟϯάΛ͏ͷ͔ ෳϨίʔυͷσʔλΛදࣔ͢Δͱ͖ ΄΅ͯ͢ ࢝Ίσʔλ͕̌ݸͱ͔ɺޙ͔Βσʔ λ͕૿͑Δͱ͔ɺͥΜͥΜOKʂ
ίϨΫγϣϯͱݴ͑Ͳ ͋͘·ͰϓϩύςΟͱϓϩύςΟͰόΠ ϯσΟϯά͢ΔجຊมΘΒͳ͍ όΠϯσΟϯάιʔεଆͷϓϩύςΟͷ ܕ͕ίϨΫγϣϯܕ͚ͬͯͩ
༻Ͱ͖ΔUIίϯτϩʔ ϧݶΒΕ͍ͯΔ ItemsSourceϓϩύςΟɺίϨΫγϣϯ ΛόΠϯσΟϯάͰ͖Δͷʢ΄΅ʣ͜ ͍͚ͭͩ
ItemsSourceϓϩύςΟ Λ࣋ͭίϯτϩʔϧͷྫ ListBox ListView TreeView DataGrid ItemsControl Menu C1.WPF.C1Cha rt.ChartData
ͬͱ؆୯ͳྫ ListBoxʹObservableCollection<string>Λ όΠϯυͤ͞Δ ViewModelΫϥε ObservableCollection<string> AnimalList ViewΫϥε(XAML) ItemsSourceϓϩύςΟ όΠϯσΟϯάιʔε όΠϯσΟϯάλʔήοτ
←͜Μͳͷ͕Ͱ͖Δ DataContext ListBox
Listͷදࣔͷํܾ ·͍ͬͯͳ͍ ίϨΫγϣϯͷதҰͭҰͭͷදࣔͷ ํDataTemplateͰࢦఆ͢Δ
DataTemplateద༻ྫ <ListBox x:Name="SimplyListBox" ItemsSource="{Binding SimplyList}"> <ListBox.ItemTemplate> <DataTemplate> <Border CornerRadius="0" BorderBrush="Black"
BorderThickness="1"> <Grid Margin="3" Width="100"> <TextBlock Text="{Binding}"/> </Grid> </Border> </DataTemplate> </ListBox.ItemTemplate> </ListBox> public class AnimalsViewModel : ViewModelBase { public ObservableCollection<string> SimplyList { get; set; }
߹͍ݴ༿ ItemsSourceϓϩύςΟͱ DataTemplateɺηοτͰ͓τΫʂ
ίϨΫγϣϯͰ͋ͬͯ ௨ʂ ίϨΫγϣϯͷ߹ɺՃɺมߋɺআΛ۠ ผͯ͠ෳࡶͳ௨ΛߦΘͳ͚ΕͳΒͳ͍ ObservableCollection<T>ͦͷลΛࣗಈͰ ͬͯ͘ΕΔʂ ObservableCollection<T>ͷTมԽ͢ΔͳΒ TINotifyPropertyChanged͕ඞཁ
ίϨΫγϣϯͷόΠϯ σΟϯά·ͱΊΔͱ ViewModelΫϥε ObservableCollection<T>ͷϓϩύςΟ ViewΫϥε(XAML) ItemsSourceϓϩύςΟ όΠϯσΟϯάιʔε όΠϯσΟϯάλʔήοτ DataTemplate ListBoxͱ͔
DataContext
DataTemplateͷͳ͔Ͱ DataContext͕มΘΔ͜ͱʹҙ <ListBox ItemsSource="{Binding SimplyList}"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock
Text=“{Binding Species}"/> <TextBlock Text=“{Binding Name}"/> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> public class AnimalsViewModel : ViewModelBase { public ObservableCollection<AnimalViewModel> SimplyList { get; set; } } public class AnimalViewModel : ViewModelBase { public string Species { get; set; } // ←INotifyPropertyChangedΛ࣮͍ͯ͠ͳ͍ͷͰ public string Name { get; set; }ɹ // ·͕ͪͬͨྫ͕ͩΠϝʔδͩͱࢥ͍ͬͯͩ͘͞ } public particle class MainWindow : Window { public MainWindow() { InitializeComponent(); this.DataContext = new AnimalsViewModel(); } } ViewModelଆ Viewଆ ͜ΕDataContextͷઃఆͷํͱͯ͋͠·Γ ͍͍ྫͰͳ͍͕ɺͬͱ؆୯ͳΓํ
Ԡ༻ྫɿDataGrid ྻͷఆٛͷͳ͔ͰόΠϯυ͢Δ͜ͱ͕ଟ͍ <DataGrid ItemsSource="{Binding ServiceStatusList}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="αʔϏε" Width="160"
DisplayIndex="0" Binding="{Binding Name}"> </DataGridTextColumn> <DataGridTextColumn Header="Քಇঢ়ଶ" Width="80" DisplayIndex="1" Binding="{Binding Status}"> <DataGridTextColumn.ElementStyle> <Style TargetType="{x:Type TextBlock}" > <Setter Property="Margin" Value="2" /> <Setter Property="TextAlignment" Value="Center" /> </Style> </DataGridTextColumn.ElementStyle> </DataGridTextColumn> </DataGrid.Columns> </DataGrid>
Ԡ༻ྫɿDataGridͱ DataTable ԿͷྻΛԿݸදࣔ͢Δͷ͔ܾ·ͬͯແ ͍ ͋Β͔͡ΊϓϩύςΟΛఆ͓ٛͯ͠ ͘͜ͱ͕Ͱ͖ͳ͍ ͦΜͳͱ͖DataTableΛDataContextʹ όΠϯυͤ͞Δ
DataGridͱDataTableͷ ૬ੑ DB͔ΒऔͬͨΛͦͷ··ͲʔΜʂ DataTable dt = null; string connectionString =
this.serverConnectionInfo.CreateBuilder().ConnectionString; using (SqlConnection con = new SqlConnection(connectionString)) { string query = “select * from aaaTable"; SqlCommand command = new SqlCommand(query, con); SqlDataAdapter a = new SqlDataAdapter(command); DataSet ds = new DataSet(); a.Fill(ds); dt = ds.Tables[0]; } this.LayoutRootGrid.DataContext = dt; <DataGrid ItemsSource="{Binding}"> </DataGrid>
ίπ DataTempleෳ༻ҙͰ͖Δ ίϨΫγϣϯͷܕʹΑ͍͚ͬͯΔ ˠDataTypeϓϩύςΟΛ͏ ಛఆͷϓϩύςΟͷʹΑ͍͚ͬͯΔ ˠDataTemplateSelectorΛ͏ DataTemplateͷதʹDataTriggerͷࢦఆͰ͖Δ
͜ΜͳͷΛߟ͑ͯΈ· ͠ΐ͏