Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Takayoshi Tanaka
PPTX, PDF
1,377 views
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
2015/05/30 めとべや東京#8 でのセッション
Technology
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Downloaded 10 times
1
/ 47
2
/ 47
3
/ 47
4
/ 47
5
/ 47
6
/ 47
7
/ 47
8
/ 47
9
/ 47
10
/ 47
11
/ 47
12
/ 47
13
/ 47
14
/ 47
15
/ 47
16
/ 47
17
/ 47
18
/ 47
19
/ 47
20
/ 47
21
/ 47
22
/ 47
23
/ 47
24
/ 47
25
/ 47
26
/ 47
27
/ 47
28
/ 47
29
/ 47
30
/ 47
31
/ 47
32
/ 47
33
/ 47
34
/ 47
35
/ 47
36
/ 47
37
/ 47
38
/ 47
39
/ 47
40
/ 47
41
/ 47
42
/ 47
43
/ 47
44
/ 47
45
/ 47
46
/ 47
47
/ 47
More Related Content
PPTX
C#/WPFで作るデスクトップマスコット入門
by
Fujikido
PPTX
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
by
慎一 古賀
PDF
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
by
Yoshifumi Kawai
PDF
TRICK 2022 Results
by
mametter
PDF
ワタシはSingletonがキライだ
by
Tetsuya Kaneuchi
PDF
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
by
日本マイクロソフト株式会社
PDF
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
by
祐司 伊藤
PDF
[Container Runtime Meetup] runc & User Namespaces
by
Akihiro Suda
C#/WPFで作るデスクトップマスコット入門
by
Fujikido
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
by
慎一 古賀
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
by
Yoshifumi Kawai
TRICK 2022 Results
by
mametter
ワタシはSingletonがキライだ
by
Tetsuya Kaneuchi
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
by
日本マイクロソフト株式会社
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
by
祐司 伊藤
[Container Runtime Meetup] runc & User Namespaces
by
Akihiro Suda
What's hot
PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
by
Yoshifumi Kawai
PDF
Windowsフォームで大丈夫か?一番良いのを頼む。
by
Yuya Yamaki
PPTX
.NET Compiler Platform
by
信之 岩永
PDF
Serf / Consul 入門 ~仕事を楽しくしよう~
by
Masahito Zembutsu
PPTX
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
ブルックスのいう銀の弾丸とは何か?
by
Yoshitaka Kawashima
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
by
infinite_loop
PDF
【Unite Tokyo 2019】Understanding C# Struct All Things
by
UnityTechnologiesJapan002
PDF
WPF開発での陥りやすい罠
by
Sho Okada
PDF
例外設計における大罪
by
Takuto Wada
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
PDF
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
PDF
MySQLアーキテクチャ図解講座
by
Mikiya Okuno
PPTX
イケてない開発チームがイケてる開発を始めようとする軌跡
by
NTT Communications Technology Development
PDF
デキるプログラマだけが知っているコードレビュー7つの秘訣
by
Masahiro Nishimi
PDF
オンラインゲームの仕組みと工夫
by
Yuta Imai
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
by
モノビット エンジン
PDF
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
by
Masahiro Nishimi
PDF
Dockerfileを改善するためのBest Practice 2019年版
by
Masahito Zembutsu
PDF
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
by
Yoshifumi Kawai
Windowsフォームで大丈夫か?一番良いのを頼む。
by
Yuya Yamaki
.NET Compiler Platform
by
信之 岩永
Serf / Consul 入門 ~仕事を楽しくしよう~
by
Masahito Zembutsu
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
ブルックスのいう銀の弾丸とは何か?
by
Yoshitaka Kawashima
新入社員のための大規模ゲーム開発入門 サーバサイド編
by
infinite_loop
【Unite Tokyo 2019】Understanding C# Struct All Things
by
UnityTechnologiesJapan002
WPF開発での陥りやすい罠
by
Sho Okada
例外設計における大罪
by
Takuto Wada
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
MySQLアーキテクチャ図解講座
by
Mikiya Okuno
イケてない開発チームがイケてる開発を始めようとする軌跡
by
NTT Communications Technology Development
デキるプログラマだけが知っているコードレビュー7つの秘訣
by
Masahiro Nishimi
オンラインゲームの仕組みと工夫
by
Yuta Imai
ネットワーク ゲームにおけるTCPとUDPの使い分け
by
モノビット エンジン
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
by
Masahiro Nishimi
Dockerfileを改善するためのBest Practice 2019年版
by
Masahito Zembutsu
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
Similar to 20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
PPTX
今から始める、Windows 10&新.NETへの移行戦略
by
信之 岩永
PPTX
今から始める、Windows 10&新.NETへの移行戦略
by
信之 岩永
PDF
Introduction to VSCode
by
Yuki Igarashi
PDF
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT apps
by
Shotaro Suzuki
PPTX
Visual Studio Online BUILD を本気で使いこなして品質&効率を劇的に上げる! [ Comm Tech Festival ] C-4
by
慎一 古賀
PPTX
Team Foundation Server / Visual Studio Online を利用したチーム開発の実践
by
慎一 古賀
PPTX
Blue monkey architecture overview
by
Atsushi Nakamura
PDF
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介
by
Shotaro Suzuki
PDF
//build/ 2016現地で感じたクライアント開発の潮流
by
Akira Hatsune
PDF
Silverlight to Next オンライン セミナー
by
インフラジスティックス・ジャパン株式会社
PDF
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
by
david9142
PPTX
Prism for windows runtime入門
by
一希 大田
PDF
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
by
Yuya Yamaki
PPTX
Desktop app dev strategy for .net core 3.0
by
Atsushi Nakamura
PDF
.Net技術でこれからも食べていくための技術戦略
by
Yuya Yamaki
PPTX
ASP.NET vNextの全貌
by
A AOKI
PDF
.NET の過去、現在、そして未来
by
Akira Inoue
PPTX
20141010 マイクロソフト技術と共に目指すフルスタックエンジニアへの道
by
Osamu Takazoe
PDF
.NET 5 勉強会 ~.NET Framework から .NET へ~
by
Fujio Kojima
PDF
第8回業開中心会議 「Windows 10 ユニバーサルアプリの概要」
by
Yasuhiko Yamamoto
今から始める、Windows 10&新.NETへの移行戦略
by
信之 岩永
今から始める、Windows 10&新.NETへの移行戦略
by
信之 岩永
Introduction to VSCode
by
Yuki Igarashi
MAF2013 Enterprise Windows 8 – Architecture for rapid development of WinRT apps
by
Shotaro Suzuki
Visual Studio Online BUILD を本気で使いこなして品質&効率を劇的に上げる! [ Comm Tech Festival ] C-4
by
慎一 古賀
Team Foundation Server / Visual Studio Online を利用したチーム開発の実践
by
慎一 古賀
Blue monkey architecture overview
by
Atsushi Nakamura
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介
by
Shotaro Suzuki
//build/ 2016現地で感じたクライアント開発の潮流
by
Akira Hatsune
Silverlight to Next オンライン セミナー
by
インフラジスティックス・ジャパン株式会社
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
by
david9142
Prism for windows runtime入門
by
一希 大田
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
by
Yuya Yamaki
Desktop app dev strategy for .net core 3.0
by
Atsushi Nakamura
.Net技術でこれからも食べていくための技術戦略
by
Yuya Yamaki
ASP.NET vNextの全貌
by
A AOKI
.NET の過去、現在、そして未来
by
Akira Inoue
20141010 マイクロソフト技術と共に目指すフルスタックエンジニアへの道
by
Osamu Takazoe
.NET 5 勉強会 ~.NET Framework から .NET へ~
by
Fujio Kojima
第8回業開中心会議 「Windows 10 ユニバーサルアプリの概要」
by
Yasuhiko Yamamoto
More from Takayoshi Tanaka
PDF
deep dive distributed tracing
by
Takayoshi Tanaka
PPTX
202202 open telemetry .net handson
by
Takayoshi Tanaka
PPTX
202109-New_Relic-for-csharp-engineers
by
Takayoshi Tanaka
PDF
20210129 azure webapplogging
by
Takayoshi Tanaka
PDF
20201127 .NET 5
by
Takayoshi Tanaka
PPTX
Unity(再)入門
by
Takayoshi Tanaka
PPTX
最近のQ#について
by
Takayoshi Tanaka
PDF
SRENEXT 2020 [B5] New RelicのSREに学ぶSREのためのNew Relic活用法
by
Takayoshi Tanaka
PDF
20191024 Get Start gRPC with ASP.NET
by
Takayoshi Tanaka
PDF
New Relicで始める、.NET Applications on AWSのObservability
by
Takayoshi Tanaka
PPTX
C#エンジニアのためのdocker kubernetesハンズオン (再)
by
Takayoshi Tanaka
PPTX
20190806 Q# Measurements
by
Takayoshi Tanaka
PPTX
C#エンジニアのためのdocker kubernetesハンズオン
by
Takayoshi Tanaka
PDF
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
by
Takayoshi Tanaka
PDF
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能
by
Takayoshi Tanaka
PDF
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
by
Takayoshi Tanaka
PDF
Try! Visual Studio 209 git feature
by
Takayoshi Tanaka
PDF
Q#基礎 ver1.1
by
Takayoshi Tanaka
PDF
(過去バージョン) Q#基礎 ver1.0
by
Takayoshi Tanaka
PDF
ゼロから始めるQ#
by
Takayoshi Tanaka
deep dive distributed tracing
by
Takayoshi Tanaka
202202 open telemetry .net handson
by
Takayoshi Tanaka
202109-New_Relic-for-csharp-engineers
by
Takayoshi Tanaka
20210129 azure webapplogging
by
Takayoshi Tanaka
20201127 .NET 5
by
Takayoshi Tanaka
Unity(再)入門
by
Takayoshi Tanaka
最近のQ#について
by
Takayoshi Tanaka
SRENEXT 2020 [B5] New RelicのSREに学ぶSREのためのNew Relic活用法
by
Takayoshi Tanaka
20191024 Get Start gRPC with ASP.NET
by
Takayoshi Tanaka
New Relicで始める、.NET Applications on AWSのObservability
by
Takayoshi Tanaka
C#エンジニアのためのdocker kubernetesハンズオン (再)
by
Takayoshi Tanaka
20190806 Q# Measurements
by
Takayoshi Tanaka
C#エンジニアのためのdocker kubernetesハンズオン
by
Takayoshi Tanaka
20190604 Containerized MagicOnion on kubernetes with Observability with New R...
by
Takayoshi Tanaka
.NET Core向けコンテナおよびデバッグ関連のVisual Studio 2019の機能
by
Takayoshi Tanaka
.NET Core向けコンテナおよびデバッグ関連のVisual Studioの新機能
by
Takayoshi Tanaka
Try! Visual Studio 209 git feature
by
Takayoshi Tanaka
Q#基礎 ver1.1
by
Takayoshi Tanaka
(過去バージョン) Q#基礎 ver1.0
by
Takayoshi Tanaka
ゼロから始めるQ#
by
Takayoshi Tanaka
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
2.
仕事 個人活動 http://tanaka733.net http://www.buildinsider.net/web/bigquery/ 2
4.
フル.NET Framework の力を! RunSpaceでPowerShell呼び出し
(System.Management.Automation.dll) Gitコマンドの呼び出しとか (libgit2sharp) 配布の容易さ MSDeploy や DSC、ClickOnce など 安心と信頼のデスクトップアプリ デスクトップは不滅 安定した技術基盤 4
5.
投資され続けるWPF 5
6.
6
7.
7
8.
DEMO VS2015のWPF関連の新機能 8
9.
二つのきっかけ 9
10.
内製デプロイツール 機能概要 Windows Serverで動作して、アプリのリリースを行う RunSpaceを利用し、PowerShellコマンドを実行 作り直しの機運 ViewModelが肥大化した上に複雑化して機能追加がつらい デプロイの仕組みを変えるのでいいタイミングではあった VS2015RC への移行(生贄) ついでに
C# 6.0にあげよう 10
11.
いい感じにGitリポジトリ一覧を管理したい VS統合/GitHub for WindowsはGitが隠ぺいされすぎててちょっと A社製ツールはリポジトリが多いと扱いづらい GitコマンドはCLIでいいので、 リポジトリの情報をわかりやすく表示したい 11
12.
ないなら作ればいいじゃない
13.
作り直し事例で考えるWPFアプリのクラス構造 新しいアプリで考えるライブラリの利用事例 Livet C# 6.0 +
ReactiveProperty 13
15.
おさらい (WPFとMVVM) View XAMLとコードビハインド ViewModel (VM) Viewのデータストア(ViewにBindingする値) Viewのためのプロパティやコマンドを持つ Model(M) VとVM以外。 15
16.
ライブラリの見直し 旧アプリ MVVMLight 新アプリ Livet ReactiveProperty 16
17.
MVVMLightで感じた問題点 単機能ツールのはずが… 画面は1つのままだけど機能がリッチに もっと強力な支援がほしい ModelとViewModelの連携 Modelの変更通知をViewModelで受け取る支援がない 結果、ViewModelに書いてしまって肥大化… 17
18.
18
19.
Model と ViewModel
の境目 19 App.dll App.Core.dll App.Cmdlet.dll MV VM
20.
何に困るのか? ModelをPlainなクラスライブラリ内にある 変更通知しづらい ViewModelが肥大化することに… コマンドから叩くのにUIを考慮したクラス? VMとのIFとなるMはUIを考慮する CmdletとのIFも…? 20
21.
MVVM再び 21 V VM M
22.
Model と ViewModel
の境目 22 App.dll App.Core.dll App.Cmdlet.dll M V VM
23.
Model と ViewModel
の境目 23 App.dll App.Core.dll App.Cmdlet.dll M V VM VMとの IF 共通 ロジック
24.
Livetにしよう WPFに特化したMVVM支援ライブラリ 「WPFのための」ライブラリ 最も多機能※なXAMLプラットフォームに合わせている ModelとViewModelの連携 Modelの変更通知をViewModelで受け取る支援がない 結果、ViewModelに書くことになって肥大化… ※ UWPのXAMLはXAMLと異なる機能で強化されている 24
25.
25
26.
煩雑になるViewModel 26 Commandの実行可否の状態管理 プロパティ変更を適切にハンドルしないと プロパティ間の連携 Modelの変更通知をViewModelで受け取る支援がない 結果、ViewModelに書くことになって肥大化… Modelとのやりとり 自身の変更をModelに通知 Modelの変更を自身に反映
27.
27
28.
ReactivePropertyとは Rxベース = すべてが
IO<T> になる Vのイベント、Mからの変更通知をIO<T>でつなぐ ModelとViewModelを楽に定義 Modelプロパティを1行でRP<T> なVMのプロパティに 宣言的なVMのプロパティの定義 プロパティ間のつながりをRxを使って宣言的に記述 28
29.
新しいアプリで考える ライブラリの実用事例
30.
MVVM再び 30 V VM M
31.
Livet + ReactivePropty
概観 31 V VM M
32.
Livetのおすすめ資料 Livetインストーラーのサンプルプロジェクト まずはサンプルコードを見てみる GitHubでLivetのクラス名入れて検索! 意外とヒットして、使い方のサンプルになる 32
33.
ReactivePropertyのおすすめ資料 MVVMパターンのシンプルなサンプル (Livet + ReactiveProperty) まずはサンプルコードを見てみる ReactiveProperty解説 新機能の説明とか 未来のプログラミング技術をUnityで
-UniRx- Unity向けだけど、RPの解説としてもわかりやすい 33
34.
34
35.
V VM
の流れ 35 <i:EventTrigger EventName="ContentRendered"> <behaviors:LivetCallMethodAction MethodTarget="{Binding}" MethodName="Initialize"/> </i:EventTrigger> <ListView ItemsSource="{Binding Repositories}" SelectedItem="{Binding Selected.Value, Mode=TwoWay}“/> public void Initialize() { Model.RepositoryMaster .Load().FireAndForget(); } public ReadOnlyReactiveCollection<Repository> Repositories { get; } public ReactiveProperty<Repository> Selected { get; } = new ReactiveProperty<Repository>(); Repositories = Model.RepositoryMaster .Repositories .ToReadOnlyReactiveCollection( x => new Repository(x)) .AddTo(CompositeDisposable);
36.
VM M
の流れ 36 public void Initialize() { Model.RepositoryMaster .Load().FireAndForget(); } public ReadOnlyReactiveCollection<Repository> Repositories { get; } public ReactiveProperty<Repository> Selected { get; } = new ReactiveProperty<Repository>(); Repositories = Model.RepositoryMaster .Repositories .ToReadOnlyReactiveCollection( x => new Repository(x)) .AddTo(CompositeDisposable); public ObservableCollection<GitRepository> Repositories { get; } = new ObservableCollection<GitRepository>(); public async Task Load() { var repos = (await source.GetRepositories()) .Select(r => new GitRepository(r.Item1, r.Item2)); Repositories.Clear(); foreach (var repo in repos) { Repositories.Add(repo); } }
37.
(VMとのIFになる)Modelの実装例 NotificationObjectを継承 変更通知するプロパティを実装 VMから操作されるメソッドを実装 void もしくは async
Task (実質的な返り値なし) 操作した結果はすべて変更通知プロパティ経由で受け取る つまり、とてもステートフルなクラス 37
38.
ViewModelの実装例 ViewModelを継承 MessengerとかCompositeDisposableが使える ViewにBindingするプロパティを実装 ReactiveProperty<T> や ReactiveCollection<T> Viewが操作する処理をコマンドorメソッドとして実装 void
もしくは async Task (実質的な返り値なし) 操作した結果はすべて変更通知プロパティ経由で受け取る 38
39.
Viewの実装例 RP<T>をBindするときは.Value RPを使う場合のView側の実装はこの程度 LivetだとメソッドをBinding可能 Command定義しなくてもいいよ Messengerを受け取るアクション VM M
の通知手段 Buttonクリック 確認ダイアログ VMのメソッド実行 までをXAML内で完結 39
40.
具体例 いくつか実例を 40
41.
41 <TextBlock Text="{Binding AlertMessage.Value}"> <TextBlock.Visibility> <Binding
Path="HasAlert.Value"> <Binding.Converter> <converters:VisibilityAndBooleanConverter ConvertWhenTrue="Visible" ConvertWhenFalse="Collapsed"/> </Binding.Converter> </Binding> </TextBlock.Visibility> </TextBlock>
42.
42 <Button Content="危険な処理" IsEnabled="{Binding
CanExecute.Value}"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <messaging:ConfirmationDialogInteractionMessageAction> <messaging:DirectInteractionMessage CallbackCommand="{Binding HogeCommand}"> <messaging:ConfirmationMessage Button="OKCancel" Caption="確認" Text="実行していいですか?" /> </messaging:DirectInteractionMessage> </messaging:ConfirmationDialogInteractionMessageAction> </i:EventTrigger> </i:Interaction.Triggers> </Button> HogeCommand = CanExecute.ToReactiveCommand<ConfirmationMessage>(); HogeCommand.Where(message => message.Response == true) .Subscribe(_ => { /* 何か処理*/ }) .AddTo(CompositeDisposable);
43.
43 <Button Content="もっと危険なコマンド" IsEnabled="{Binding
CanExecute.Value}"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <messaging:TransitionInteractionMessageAction WindowType="{x:Type v:AlertDialogWindow}" Mode="Modal"> <messaging:DirectInteractionMessage CallbackMethodTarget="{Binding}" CallbackMethodName="Fuga"> <messaging:TransitionMessage/> </messaging:DirectInteractionMessage> </messaging:TransitionInteractionMessageAction> </i:EventTrigger> </i:Interaction.Triggers> </Button> public void Fuga(TransitionMessage message) { if (message.Response == true) //ダイアログでOKだったら { //何か処理 } }
44.
まとめ
45.
デスクトップアプリは不滅 デスクトップといえばWPF M is neither
“共通クラス” nor “ビジネスロジック” MVVMの役割をもう一度考えよう Mがリッチでないと、VMが肥大化しがち WPFならLivet便利 ReactivePropertyで宣言的な記述を 45
46.
46 http://amzn.to/1EGFTaN
47.
Visual Studio 2015
における 統合開発環境の進化 Unityを使用した Windows 用の 2D および 3D ゲーム開発ジャンプスタート MVA コンテンツ
Editor's Notes
#9
たとえばViewModelをコードで足すと、コンパイルなしにXAMLで補完が聞くようになる XAMLのUIデバッグ=>実際のXAML構造が見れる 診断ツール
Download