WPF(.NET, WinUI) GUIプログラミング Part26

■ このスレッドは過去ログ倉庫に格納されています
2021/06/20(日) 17:04:18.66ID:7UVkl7BZ
Windows Presentation Frameworkについて語るスレ。

前スレ
WPF(.NET4.x, .NET Core) GUIプログラミング Part25
https://mevius.5ch.net/test/read.cgi/tech/1612522463

関連スレ
Windows 10 UWPアプリ開発 Part 2
http://mevius.2ch.net/test/read.cgi/tech/1499658092/

コードを貼る場合は以下のサイトの利用をお勧め。
run codeのチェックは外しておきましょう。
http://ideone.com/
2021/07/03(土) 13:31:50.48ID:xrPgyhkt
>>304
実際には、WinFormsが少し前の高級車で、WPFは、バックカメラを
搭載した軽自動車みたいな感じだろう。
速度が違うし、どっちがいいとも言えないような状態。
2021/07/03(土) 13:51:45.16ID:xrPgyhkt
>>325
もとい。
バックから見たいな画期的なものはWPFには付いてない。
せいぜい、短波ラジオが追加された軽自動車みたいな印象。
2021/07/03(土) 14:03:08.22ID:+Y9Mw3Lc
WPFってWindowsメッセージドリブンなアプリを作れないよね
2021/07/03(土) 14:03:10.68ID:SKBAEND3
そんなにWinFormが好きなのかw
2021/07/03(土) 14:22:06.46ID:+F8p4M2+
>>325
実際にはWinFormsがリヤカーでWPFがステーションワゴン
2021/07/03(土) 14:22:33.63ID:xrPgyhkt
WinFormsは、レンブラントやミケランジェロの作品の様に万人から一定の評価を
受けるようなものだが、WPFはピカソの絵みたいに人を選ぶ。
支持者には画期的で先鋭的なものらしいが。
2021/07/03(土) 16:12:05.88ID:kc73fFDc
いつまでWinForms vs WPFやってんの
ネタが尽きて妙な例えになってるし、いい加減にしろ
2021/07/03(土) 16:51:53.62ID:bc4tv4Cc
10年以上続けてる習慣にいい加減にしろだって!?
お前こそいい加減に止めることはできないって現実を理解しろよ
2021/07/03(土) 18:06:40.40ID:DAcib8Yu
>>320
やってみようかなという気持ちと
そっちの道も蛇の道では、または
それならWinFormsでいいんではないかという気持ちがある

WPFの扱いをユーザー側でどうこうするより、
MS側でバインディングを簡素化してくれた方が嬉しいかな
2021/07/03(土) 18:07:36.50ID:yLRyBVvw
自分が知ってるOSSでWPF使ってるのはEDCBぐらい
MVVMは使ってないようだけど
2021/07/03(土) 18:27:49.11ID:DAcib8Yu
>>322
ここ3年ぐらいで出版されたのを一冊買ってある
アマゾンで高評価だった奴
でも、欲しかった情報とちょっとズレてるんだよね・・・
もちろん有用な情報もあったけど
2021/07/03(土) 18:30:13.91ID:DAcib8Yu
>>324
> js覚えてReactとかやってみたら?

あら、今、正にそこ
そうだね、その方向性で行こう
2021/07/03(土) 19:20:53.81ID:l02BKdxs
今更、WPFを覚えるってのもね。
2021/07/03(土) 19:52:56.77ID:ApVtA7Dx
今ならWindows Runtime系の本でC#バージョン新しめのやつ探したほうが良い、あるのかは知らん(´・ω・`)
Xamlまでやるなら素直にPetzoldくんの6版
2021/07/03(土) 20:10:39.49ID:PF+2QSJm
マジか。WPF今から頑張ろうと思って色々調べているけど
正当進化のUWP?がズッコケてるのみるとこの技術に未来はないのかなとも思う
ただWPFのFormsにはない先端で綺麗なコントロールがあるからほっとけない
2021/07/03(土) 21:19:34.25ID:aubZqG39
今WPFを使う必要に迫られているのではなく将来を考えて勉強しようとしているなら、
さすがにそれはWebかスマホをやったほうがいいぞ
2021/07/03(土) 22:02:27.73ID:/7aEvID4
Reactの次のステップが
React Native for windowsでのwinアプリ作りだね

https://docs.microsoft.com/ja-jp/windows/dev-environment/javascript/react-overview#does-react-work-on-windows

https://microsoft.github.io/react-native-windows/
2021/07/03(土) 22:03:35.57ID:yLRyBVvw
今ネイティブアプリを作る理由は鯖を用意しなくて良いぐらい…
2021/07/03(土) 22:10:03.29ID:/7aEvID4
ネイティブアプリで自前ブラウザーを構成し、
本体アプリはReactで作成する
344デフォルトの名無しさん
垢版 |
2021/07/03(土) 22:13:34.86ID:yhsKzI36
>>339
趣味なら良いんじゃない?
慣れれば使いやすいから

フリーランスとかで案件が欲しいんだと微妙
345デフォルトの名無しさん
垢版 |
2021/07/03(土) 23:34:47.12ID:gAHM5nnh
>>339
WPFのxamlは多機能すぎるしとりあえず最低限でもいいから適当にやればいい
ただ、MVVMは他でも使ったりするからこっちを重点的にやればいい
2021/07/03(土) 23:35:31.59ID:yLRyBVvw
MVVMは他でも使うというのは語弊があるかと
2021/07/03(土) 23:36:48.07ID:gAHM5nnh
俺が勉強した時は最初はxamlに深入りしないで他でもいきるMVVMの方に力入れてモチベーションを維持した
2021/07/03(土) 23:38:42.00ID:yLRyBVvw
MVVM技術は袋小路で他に流用できないし思想も実装によって違う
MVVM自体はこれから捨てられる技術

開発&テストしづらいのでFaceBookはMVVM否定してReactでFluxを使ってる
2021/07/03(土) 23:40:38.59ID:yLRyBVvw
MVVMが向いてるのは個人などの小規模アプリ
中〜大規模だと相互の関係が分かりづらくバグの温床になるので敬遠される
2021/07/03(土) 23:44:15.93ID:gAHM5nnh
andorid開発でもDataBinding+MVVMだし
flutterでもMVVMで作ってるし
最新のjetpack composeでもMVVM使う予定だけど

ただ、flutterなどデータバインディングない環境は自前でVとVMを接合しないといけないけど

すげぇ便利
2021/07/03(土) 23:46:01.95ID:f2jJT3fK
>MVVM技術は袋小路で他に流用できないし思想も実装によって違う

そもそもその手のアーキティクチャで他に流用できるものなんてどんだけあるかねぇ。
結局フレームワークごとそれぞれの考え方を習得しなきゃsならんように思うが。
2021/07/03(土) 23:55:56.96ID:gAHM5nnh
MVVMは基本、単に責務ごとにMとVとVMに分けて、オブザーバーパターンで状態変化通知して、xamlみたく組み込みのデータバインディングあればなおさらいいてだけじゃん

フレームワークによらず、アプリ全体をMVVMで設計できて
フレームワークによって違うのは主にVとVMと接合部分だけで
むしろ新しく覚えるのがそれだけなんだが?
2021/07/04(日) 00:12:28.55ID:YIai1OGN
MVVMは副作用がわかりにくいので更新順序などで結果が違うなどバグの温床になる
状態を考慮せず実装できるような気がするが実は隠れた状態があり
その状態自体が見えづらく制御しづらい
2021/07/04(日) 00:12:35.78ID:scRQ4YdL
むしろMVVMのV差し替えで別フレームワークに切り替えた実例見たことないけど何かある?
2021/07/04(日) 00:14:23.32ID:YIai1OGN
VとVMの切り替えはセット
2021/07/04(日) 00:20:28.59ID:pwN2nm3/
誰もさすがにコード共有までは言ってない
MVVMというアーキテクチャでUIフレームワーク変わっても同じように設計、実装できるといってるだけ

別にUIフレームワーク変えて一方向のデータフローが好きなら新しくfluxも覚えればいい
357デフォルトの名無しさん
垢版 |
2021/07/04(日) 01:13:39.87ID:arSMsrRy
MSもMAUIではMVU採用したみたいだけど
WinUIはどうすんのかな
358デフォルトの名無しさん
垢版 |
2021/07/04(日) 01:16:05.43ID:arSMsrRy
>>353
そういうこともあるけどナレッジが蓄積されるとバグのパターンと修正ポイントがすぐわかるようになる
大昔イベントドリブンの黎明期にも同じような事が言われて
古参が「ほらやっぱり逐次制御で書かないと分かんなくなる」と騒いだけど
その時も同じように解決されていった
2021/07/04(日) 06:27:35.14ID:pwN2nm3/
たぶんだけどmauiのMVUっても二つに分けてかんがえないと
まず、flutterなど今どきっぽく、UIをxmalではなくコードで宣言的に書けるってことだろ
で、おそらくjetpack composeみたくコードで書いた部分の状態を参照する部分は
オブザーバブルな状態の変更通知の購読、キャンセルはコンパイラサポートでコード自動生成?
flutterはここ自前でやらなきゃいけないので面倒

で、UIでイベントが発生したら、あとはそのイベントをどこに流すかだけでしょ

イベント発生時にViewModelのメソッド呼べばMVVMになるし
他の何かにしてデータの流れを一方向にすればMVUになるし

ただそれだけの話
2021/07/04(日) 06:30:16.24ID:pwN2nm3/
.NET MAUIでUIがxaml使わずにコードで宣言的にUIかけるように
なっても、UIのイベントをどこに流すかでMVVMにもほかのMVホゲホゲの何かにもなるし
ただそれだけ

俺が>>350のjetpack composeでやろうとしてることと同じ

想像だけどね
2021/07/06(火) 07:06:29.25ID:Mov0te+3
React Nativeはオワコン、PWAも手を出す価値なし?
2021/07/06(火) 09:51:25.64ID:RV/aERgl
VMとMをバインディングするからいろいろイビツになったり複雑になったりするんだと常々思う
2021/07/06(火) 09:58:12.53ID:1wxKYJ6u
違うだろ
2021/07/06(火) 11:18:59.50ID:xnJqtZB6
いや違わない
コードビハインドを使うなというアホまで出る始末
2021/07/06(火) 11:34:57.19ID:RV/aERgl
変更即時反映のUIって最近流行りじゃん、スマホでもWebでも最近ではWindowsの設定画面でも
あれUXとしては後退だと思うんだよね
でもMVVMから見ると素直に作れるんだよね

プログラマやってる俺ですら
あれ?ミスタッチしたんじゃね?
どこ変えたかわかんなくなったからキャンセルしたいんだけど?
って度々思うもん
2021/07/06(火) 12:07:19.74ID:1wxKYJ6u
>>364
ごめん
読み間違えてた
コードビハインドの件は同意
あれはBlendでポトペタするため
2021/07/06(火) 12:31:13.78ID:paV/EiqB
>>365
optimisticなuiって奴か?
俺あれ嫌いや
2021/07/06(火) 12:32:33.09ID:paV/EiqB
ああ違う
いちいちSaveとか押さんでも保存される奴か
あれは確かにデータフローに引っ張られてる面あると思う
2021/07/06(火) 16:37:57.56ID:ScK6t+pL
DataGridのColumnHeaderのボーダーがCellのそれと比べてほんの少し右にズレてるのは仕様?
2021/07/06(火) 21:30:26.20ID:YzLUI9DG
blenderおじさんまだいるのかw
371デフォルトの名無しさん
垢版 |
2021/07/06(火) 21:43:25.19ID:8gON5+RN
>>369
仕様 回避コード書いてるサイトあったな
2021/07/07(水) 06:26:07.20ID:mc7eJwPZ
>>365
変更即時反映が悪いわけじゃない。
直近で変えた項目の色を変える、設定変更のアンドゥをできるようにする等
いくらでも改善できる。
373デフォルトの名無しさん
垢版 |
2021/07/07(水) 07:59:44.80ID:aJu+QZ75
設定を他人に伝えるとき即時のほうがありがたい
適用ボタンを押す指示はないほうがいい
2021/07/07(水) 10:28:43.71ID:Q3P1Rq1L
>>372
やってないじゃん
2021/07/07(水) 12:02:11.13ID:Lzprbr4S
>>371
仕様か
昔の立体Win32スタイルの名残でズレてるってことなんだろうな
2021/07/07(水) 14:14:24.07ID:8DbHlE2J
>>373
大体、そういう説明が理解出来ない人は低IQか初心者。
慣れた人には適用ボタンが有った方が便利で安心。
Windowsは少し高IQな人に向いている。
モバイルは万人向けなので、普通IQや低IQの人が使える様になっているが、
むしろ機能としては不便になっている。
377デフォルトの名無しさん
垢版 |
2021/07/07(水) 15:07:54.70ID:49748z4f
>>376
++
2021/07/07(水) 15:28:42.41ID:oUueiKD3
>>376
☆★★★★
2021/07/07(水) 15:35:09.52ID:Q3P1Rq1L
既存のモデルにコンソールのガワを被せるためにMVVMを採用
バインディングのためにモデルをバインディング仕様に改造

もうこれがイビツ極まりない
UIフレームワークの都合に合わせてモデルを変更するとか気持ち悪すぎる
2021/07/07(水) 16:51:39.11ID:tPYXmU6j
>>379
★★★★★
2021/07/07(水) 18:05:12.08ID:AWE9BvFy
個人的にはせっかくバインドする仕様にしたんだから、デフォルトをリアクティブに寄せれば良かったのにと思う
webのJSフロントエンドフレームワークとかみたいに感覚的じゃないんだよね
2021/07/07(水) 18:20:21.95ID:mc7eJwPZ
>>376
典型的な低IQ無能プログラマ。
そんな甘ったれた考えだといつまでたっても底辺から上がってこれないぞ。
2021/07/07(水) 18:24:35.65ID:mc7eJwPZ
>>379
何か作り方おかしくないか?
UIそのものやUIフレームワークを除外した残りがモデルなんだから。
384240
垢版 |
2021/07/07(水) 18:36:42.16ID:OWcilrjN
>>381
ReactiveUI+乱立してるMVVMフレームワークから1つ決めて公式実装にしてほしいわ
というかぶっちゃけAvaloniaの方向性で良いので、買収して開発リソースぶちこんでくれ…
2021/07/07(水) 18:39:51.64ID:Q3P1Rq1L
>>383
それがUIの都合で汚染されるのがイヤだって言う話
2021/07/07(水) 18:56:02.35ID:mc7eJwPZ
>>374
変更即時反映がUXとして後退と主張するから違うと指摘したまで。
例えばVSCodeの設定UIはデフォルトから変えた部分は印が付く。
2021/07/07(水) 18:59:32.38ID:mc7eJwPZ
>>385
なぜVMに書かない
2021/07/07(水) 19:37:01.71ID:Q3P1Rq1L
>>387
389デフォルトの名無しさん
垢版 |
2021/07/07(水) 19:54:05.96ID:aJu+QZ75
>>376みたいな人間がUXを語るべきじゃないな
感性も腐ってそう
2021/07/07(水) 20:56:03.54ID:85qcEXGX
開発者のエゴイズム丸出しでいかにもWPF好きらしくていいじゃん
2021/07/07(水) 21:01:06.97ID:opTZ3hwS
WPFって見た目がカラフルでもUIデザインの基本的なプロトコルはクラシックなWinアプリのままなんで、
画面遷移とか作り込んで完全にWebやスマホ風にしてしまうのでもない限りは即時反映はかえって混乱を招くと思う
392デフォルトの名無しさん
垢版 |
2021/07/07(水) 21:03:20.07ID:aJu+QZ75
彼はむしろWPFアンチだよ
冗長くんだもん
2021/07/07(水) 22:28:03.79ID:SoF9c5HC
>>388
バインディングの都合を満たすのはVMの仕事で、Mの独立を保つ為に犠牲になる係でしょ?
2021/07/07(水) 23:12:07.60ID:1XrHuH3i
しかし、Modelの一部をINotifyPropertyChangedやReactivePropertyに変えるなど
規模にもよるが小一時間の仕事だろうに

使いたくない理由を無理やり探しているんだろうね
2021/07/07(水) 23:14:24.01ID:O/p4KsNN
INotifyPropertyChangedなんてWinFormでも使うだろうに
何のためのモデルクラスだったんだろう
2021/07/08(木) 07:47:22.54ID:/EVL8M+q
>>394
手間の問題じゃなくて
なんでUIフレームワークの都合でモデルをいじらなきゃならんのかって話
2021/07/08(木) 07:53:01.19ID:0NJb5JqL
WPF使う場合はやはりモデルから対応しなければならない
それが嫌なので躊躇してしまう

モデルが依存関係を除去したところでINotifyPropertyChanged実装しないといけない
2021/07/08(木) 07:57:14.43ID:hcvY/pCa
>>394
なんで
INotifyPropertyChanged
ReactivePropert
みたいのがmodelにあんの?(;´д`)
2021/07/08(木) 11:13:00.38ID:h5za3xa1
MVVMで作ればINotifyPropertyChanged実装しなきゃいけないのはUIとバインドするViewModelだけだぞ
ModelをObservableにしたければ、独自のObservableインターフェース使えたければ使えばいいじゃん
Modelは無理にINotifyPropertyChanged使う必要はない
2021/07/08(木) 11:17:20.04ID:h5za3xa1
つか、要件としてModelをObservableにするならUIフレームワーク関係なく
何かしらのObservableインターフェースが必要になってくるんだが

他のフレームワーク、言語使っても同じなんだが頭大丈夫??
401デフォルトの名無しさん
垢版 |
2021/07/08(木) 11:40:47.13ID:dQrLp+p1
そのへんフィールドをプロパティにするだけで全部やってくれてたらもっとユーザー増えただろうな
2021/07/08(木) 11:43:27.90ID:h5za3xa1
INotifyPropertyChangedの実装がWPF特有の問題だと思ってるあたりが頭おかし

他のUIフレームワークでもモデルの変更に応じてUI変えるなら、Observeする仕組みが必要でINotifyPropertyChangedに相当する機能をどのみち実装しなきゃいけないのに

>>396,397
君は他のUIフレームワーク使ったときにどうやって実装するわけ??
2021/07/08(木) 12:47:08.14ID:hcvY/pCa
>>402
明示的なコード書かなくても
フレームワーク側でバインド解決できるのが
普通のMVVM
2021/07/08(木) 12:57:43.95ID:h5za3xa1
そういうフレームワークの具体例を1個上げて
2021/07/08(木) 13:10:14.80ID:/EVL8M+q
>>402
WPFみたいなバインディングはしません
406デフォルトの名無しさん
垢版 |
2021/07/08(木) 13:15:55.68ID:h5za3xa1
>>405
WPFみたいなバインディングしなくてもモデルをObservableにするならどの道何らかのインターフェースが必要になるって話をしてるんですけど理解してますでしょうか??
2021/07/08(木) 13:26:17.14ID:UhDpZcYs
>>398
通知のためだけのインターフェースがボコボコ増えてくのが嫌だからさ
全てRxのIObservableならよかったな
つかWPFもバインディングエンジンの部分をプラガブルにしろよな
なんでINotifyPropertyChangedみたいなクソにしがみついてるのか理解しかねるね
2021/07/08(木) 13:27:17.81ID:UhDpZcYs
てか今後新しい通知インターフェースを宣言した奴は死刑でいいよ
殺す
2021/07/08(木) 13:31:44.36ID:WFCJSrYx
趣味でやってるだけだからよくわからんけど同じプロパティー2回書かせるのやめてくれ
めんどくさい
2021/07/08(木) 13:37:39.15ID:hcvY/pCa
>>407
メリットは外だしなんで
カスタマイズして
オレオレ仕様に出来る以外ない
2021/07/08(木) 13:43:42.57ID:h5za3xa1
.net mauiのMVUってINotifyPropertyChangedの仕組み乗っかるの??
ブログの例ではState<T>とかあるけど
State<T>ならjetpack composeと同じやん
2021/07/08(木) 13:52:37.12ID:/EVL8M+q
>>406
だからバインディングはVVMまででいいって言ってんじゃん
413デフォルトの名無しさん
垢版 |
2021/07/08(木) 13:54:52.32ID:icewyiWh
これでいいじゃん。using追加してAnnotation付けるだけだよ
https://www.reactiveui.net/docs/handbook/view-models/boilerplate-code

[Reactive]
public string Name { get; set; }
2021/07/08(木) 13:55:12.53ID:Y0QirsOb
まあ他の言語のFWはばかでも書けるけど、
ことWPF含めMS主導のは一部の細かい主張に答えるためか、
やることが回りくどいんだよな
FW使ってるのに書くことが多いと言うか
415デフォルトの名無しさん
垢版 |
2021/07/08(木) 14:00:41.26ID:h5za3xa1
>>412
じゃあ、モデルでは好きなObservableインターフェース使えばいいじゃん
独自でもRxでもご自由に
2021/07/08(木) 14:05:52.94ID:/EVL8M+q
>>415
うわ頭悪そう
2021/07/08(木) 14:35:39.28ID:zQs4IMMf
>>404
case: knockout.js

<span data-bind="text: viewModel.value1"></span>
418デフォルトの名無しさん
垢版 |
2021/07/08(木) 14:48:13.57ID:h5za3xa1
>>417
それ全然違うから...
2021/07/08(木) 14:51:52.72ID:zQs4IMMf
>>404
case: React

<span>viewModel.value1</span>
2021/07/08(木) 14:57:32.77ID:h5za3xa1
>>419
>>417と同じのりで挙げてるならこれも違う
2021/07/08(木) 16:00:11.32ID:zQs4IMMf
>>420
おお、すまん
訂正

>>404
case: React

<span>{viewModel.value1}</span>
2021/07/08(木) 18:03:12.85ID:hcvY/pCa
>>404
case: Vue.js

<span>{{viewModel.value1}}</span>
2021/07/08(木) 18:32:35.94ID:0NJb5JqL
h5za3xa1は世間知らずのWPF至上主義者なんだ

許してやれとは言わないが冷たい目で見ればいいよ
2021/07/08(木) 18:33:09.06ID:hcvY/pCa
>>404
case: Blazor

<span>@viewModel.value1</span>
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況