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

レス数が900を超えています。1000を超えると表示できなくなるよ。
2022/04/11(月) 05:10:34.19ID:LqBiqZMV
WPF(Windows Presentation Foundation)について語るスレ。

前スレ
WPF(.NET, WinUI) GUIプログラミング Part28
https://mevius.5ch.net/test/read.cgi/tech/1642624840/

関連スレ
Windows 10 UWPアプリ開発Part 3
https://mevius.5ch.net/test/read.cgi/tech/1627556967/

コードを貼る場合は以下のサイトの利用をお勧め。
https://ideone.com/
2022/10/20(木) 20:22:28.34ID:4NfigoYb
>>826
いろいろ繋げると玄人になった気分が味わえるからな
ピタゴラスイッチみたいなもんよ
2022/10/21(金) 08:38:15.01ID:7kH42VO8
>ViewやViewModelにロジック入れるとは思えないけどw

ビジネスロジックじゃなくてプレゼンテーションロジックは普通に入れるだろ。
833デフォルトの名無しさん
垢版 |
2022/10/21(金) 18:37:34.29ID:/3dSptxz
>>819
危うく手出すところだった。
834デフォルトの名無しさん
垢版 |
2022/10/21(金) 19:51:23.73ID:/3dSptxz
質問なんだが、コントロールとのデータのやり取りは全てデータバィンディングに
するの?
テキストボックスくらいならまだしもコモンコントロールでいうListViewも
データバィンディング? 大変そうなんだが。
2022/10/21(金) 20:12:20.19ID:fkhZIfDj
アイテムテンプレートという各アイテムのビジュアル表現をxamlで一度定義すれば後は勝手にアイテムの数だけコントロール作ってくれる
ViewModelはアイテムを表すオブジェクトのListを保持してりゃいいだけ
836デフォルトの名無しさん
垢版 |
2022/10/21(金) 20:16:17.14ID:fkhZIfDj
ListViewの話ね

最初の質問に関してはデータバインディング使いたくなきゃ使わなくてもいいが
その場合、自分でコントロールの中身を手動で更新
これがめんどくなければ使わなくてもいいんじゃないか
2022/10/21(金) 20:44:00.37ID:dr0clczO
そのうちバインディングでないと面倒くさくなるよ
2022/10/21(金) 20:59:53.80ID:PtHJlLEa
素でバインディングじゃ無理な場合はビヘイビアというのでイベントをVMに通知したりする
それでも無理ならサービスクラスをViewからVMにインジェクションするんだが
コレは結構インチキ臭い(MVVMとして)

でもScrollIntoViewなんかを実行するならサービスクラスでやるしか無いんだよな
2022/10/21(金) 21:01:42.97ID:5OVp+/fG
>>838
普通にコードビハインドでいいしビヘイビアでもできるだろ
2022/10/21(金) 21:06:09.93ID:l9aLYoss
>>834
バインディングした方が楽な時だけすればいい。
コントロールに名前つけてプロパティに値設定してやるオーソドックスなやり方の方が
結局メンテもしやすくコードもすっきりする事も多い。
841デフォルトの名無しさん
垢版 |
2022/10/21(金) 21:13:29.65ID:/3dSptxz
いろいろ助かる。

素人すぎてどういうときにバインディングすればいいかわからんな。
ま、いろいろ試すしかないな。

>>自分でコントロールの中身を手動で更新
今までそうしてたから苦ではないけどな。
2022/10/21(金) 21:18:16.45ID:PtHJlLEa
>>839
ScrollIntoViewのビヘイビアは作ってみたが、一度表示したアイテムがユーザーのスクロールで範囲外になった時
それを再び表示するとなると、一度nullを入れてからアイテムをセットしないと動かない
美しくないからボツにしてサービスクラスにしました
2022/10/21(金) 21:59:58.51ID:SIBduJ8N
ユーザーコントロール作るの大変なのどうにかしてほしいわ
添付プロパティとかなんであんな実装大変なんや
2022/10/21(金) 22:46:07.26ID:5OVp+/fG
>>843
俺もそこは気に入らんけどコードスニペットや拡張メソッド使えばそこまで大変ではないし添付プロパティなんか滅多に実装することないだろ
2022/10/22(土) 12:06:28.89ID:hKX+QcZc
とにかく面倒くさいという事がよくわかる

いやーー早期にReactに移っといて良かったわーー
2022/10/22(土) 12:08:49.73ID:LN75Th25
MAUI HighSchoolは芸風変えたのか
847デフォルトの名無しさん
垢版 |
2022/10/23(日) 11:28:55.52ID:a+gf5qbq
データバィンディングについて良いHPあったら紹介を求む!
2022/10/23(日) 12:50:54.71ID:PeJMt3DI
おかずきさんのブログ見ればいいじゃん
849デフォルトの名無しさん
垢版 |
2022/10/23(日) 15:15:46.33ID:a+gf5qbq
>>848
そのブログではプリズム使うみたいですね。
止めときます。。
2022/10/23(日) 22:19:07.90ID:QAzLw4mz
バインドするだけなら、nugetにあるReactiveProperty使ったらどう?
あれが1番簡単そうに見えたけど
2022/10/23(日) 23:16:12.48ID:UYu25ZB7
データバインディングの勉強目的なら最初は何も使わずにINotifyChangedPropertyぐらい自前実装でいいだろ
10行未満なんだし
852デフォルトの名無しさん
垢版 |
2022/10/24(月) 05:52:10.08ID:KSxIdWu8
バィンディングっていろいろ手法があるみたいでその辺も混乱の元ですね!
2022/10/24(月) 08:24:55.30ID:faJr3BKh
INotifyChangedPropertyの実装に関しては、prismもmicrosoft.toolkitもほぼ同じもの
Xaml側は全く同じだからどのHPを見ても何も問題ないんだけどね
prismで勉強して、些末な違いをMSのドキュメントで補完すればいいんじゃないかな
2022/10/24(月) 09:19:40.79ID:1MyEkAqJ
React界隈じゃ
不用なのものを徹底的に排除して突き詰めてるのに、

XAML界隈は
ライブラリー!ライブラリー!ライブラリー!
ドヤ顔ライブラリー房のこの違い...
2022/10/24(月) 10:44:59.17ID:chiatfyX
Reactに対応するのはXAMLじゃなくBlazorなので
856デフォルトの名無しさん
垢版 |
2022/10/24(月) 14:16:41.10ID:qez9jhSx
x:Bindのない環境には戻れなくなったな
2022/10/24(月) 14:22:42.94ID:4Vi8uVIi
>>856
残念ながらUWPとUnoでしか使えないx:Bindはオワコンだ
2022/10/24(月) 16:39:17.71ID:TU0Y+jHJ
x:bind最新のWinUI 3で使えないんだっけ?
2022/10/24(月) 18:22:08.47ID:tdhvInBd
>>854
これ何の話してんの?
2022/10/24(月) 18:23:57.86ID:D4BkPogX
やってみた。
x:BindはWinUI3もMAUIも使えるよ。
安心しな。
2022/10/24(月) 18:38:10.90ID:ahW9XqJY
いやWinUIでも使えるわx:Bind
2022/10/24(月) 18:46:31.31ID:DN4O5MAE
UWP作ってないしx:bind使ったこと無かったわ
その使い心地を見せて貰おうかっ
863デフォルトの名無しさん
垢版 |
2022/10/24(月) 20:07:56.89ID:KSxIdWu8
>>850
今日入れてみた。試してみる。
いろいろフレームワーク大すぎ。
MSが良いもの出さないからか。
こっちでの開発ではプリズム、
異動先ではReactiveProperty使用とか。
難儀やなぁ。
2022/10/24(月) 20:38:47.05ID:TU0Y+jHJ
x:bindはUWPでコンパイル時バインドで速いという触れ込みがあったから使ったみたが速度差体感できずコンパイル時の型チェックもうざいので俺はbindindに戻ったけど
2022/10/25(火) 00:26:50.52ID:YzZqh/Jo
コマンドに使用可否だけじゃなくて、表示非表示も持ってほしいよな
2022/10/25(火) 17:32:19.08ID:ZIbwJZxR
それは同意
2022/10/25(火) 17:39:08.19ID:qnnhkHib
VisibleとEnabledを自己バインドすればいいだけじゃね
2022/10/25(火) 18:12:35.24ID:ZpBlkdg7
x:Bindはイベントがバインド出来てFormsのやり方MVVMででコーディングできるんだっけど
そこらへんをアピールするつもりはないようだね
ビヘイビアが難しいわけじゃないけど冗長だから使わずに済むのも大きいね
2022/10/25(火) 18:52:32.57ID:ZIbwJZxR
>>867
それじゃ足りないケースがあると思う
2022/10/25(火) 18:58:07.50ID:tQ39k2n1
どういうケースを想定してるのかわからんわ
disabledの時に消せばいいんじゃないのか?
2022/10/25(火) 19:22:02.07ID:ZIbwJZxR
そもそも表示しない
表示するが無効
表示するが有効
この3通りをやりたい時がある
2022/10/25(火) 19:28:01.21ID:E0pz5hZT
get -> そもそも ? hidden : 表示する ? visible : hiddem;
2022/10/25(火) 19:30:03.09ID:tQ39k2n1
そんなことしたいと思ったことないからわからんけどコマンドとのバインディングでしなきゃいけないなら継承するしかないな
俺ならViewModelのプロパティを使うが
2022/10/25(火) 19:33:01.57ID:ZIbwJZxR
例えば、ログイン機能があるアプリとかでログインしてなきゃ更新ボタンをそもそも表示しない
で、ログインして更新ボタンを押して更新中になったら一時的に無効に切り替えてとか
たまに、表示/非表示と有効/無効を別に扱いたいときがある
2022/10/25(火) 19:38:27.55ID:FKrq6Yl8
単純にコードビハインドでやれば良くね? 頭悪いの?
2022/10/25(火) 19:39:39.54ID:qnnhkHib
それログインボタン以外の管理用機能が必要になった時どうすんの
管理者フラグをVMに用意して管理者用コントロールパネルごと消すべきだろ
個々のコマンドじゃなく
2022/10/25(火) 19:46:40.08ID:ZIbwJZxR
例えが悪いなら謝るが
別にボタンの他に、メニューにバインドされる可能性だってあるし
俺が昔必要に思った時のケースは思い出せねぇわ
878デフォルトの名無しさん
垢版 |
2022/10/25(火) 20:07:37.74ID:IkY374Tt
MVVM? 初心者だがやはり有用性が理解できんw
2022/10/25(火) 20:12:35.43ID:qnnhkHib
そりゃ初心者は理解できんかもな
大きく複雑なプログラムを作る時に威力を発揮するものだから
880デフォルトの名無しさん
垢版 |
2022/10/25(火) 20:16:47.78ID:IkY374Tt
>>879
らしいね。
みんなもそうな大きく複雑なもの作ってるんだ?
2022/10/25(火) 21:19:57.69ID:YzZqh/Jo
そもそも世の中に転がってるシステムに疎結合なんて不要な気がするわ
設計に時間かけれる人は自己満足でやってもいいかもしれないけど
2022/10/25(火) 21:36:23.84ID:Z3XSYrgl
保守せずに作り逃げするならいいかもね
2022/10/25(火) 21:43:21.12ID:M72P4hA2
WPFの主用途はゴリゴリの業務アプリだから、複雑なのはUIではなく業務フローなんだよね
ただ画面数が多いだけだ
884デフォルトの名無しさん
垢版 |
2022/10/25(火) 21:46:12.07ID:IkY374Tt
バレない程度にどんなもん作ってんだい?
885デフォルトの名無しさん
垢版 |
2022/10/25(火) 22:04:24.76ID:IkY374Tt
>>881
UIとロジックは疎結合にしろ、てもう聞き飽きた。
そんなに大事なんかね。
2022/10/25(火) 22:37:19.01ID:YzZqh/Jo
>>885
VMが出てきたせいで、コードビハインドは悪、画面に関わるコードはすべてVMに書くべきってイメージが出来ちゃったのがなぁ
2022/10/25(火) 22:39:03.01ID:xY6yVmpD
それ狂信者が勝手に言ってるだけだぞ
マイクロソフトはむしろコードビハインドを推奨してる
2022/10/25(火) 23:21:20.95ID:vN3+STZB
>>887
まじ?
聞いた事ないけど
889デフォルトの名無しさん
垢版 |
2022/10/26(水) 05:51:47.91ID:s6MGFJdq
>>883
しかも業務アプリって見栄えはあまり
重視せず、使い勝手や速度が優先されるからな。
ボタンが回転したりそんなのどうでもいいわ。

今まで通り非MVVM?のイベントドリブンだとボタンを
押したときの挙動はそのイベントハンドラ(だけ)に記載
されるているのは間違いない訳でソースも追いやすいし、修正、
機能追加もし易い。

自分は知識としてMVVM? 学習してるけど使うことはなさそうだなぁ。
2022/10/26(水) 14:31:05.80ID:PkKdzRr+
極論かもしれないが、MV*って結局ユニットテストを作成するかどうかだと思っている。

ユニットテストが要らないような規模のプロジェクトなら好きにすればいいのではないかと。
2022/10/26(水) 14:44:53.94ID:JLiTjZTy
規模といっても色々あるからね
大抵の業務アプリでは全体としてどれほど大規模で複雑なシステムでもただ画面数が多いだけで個々の画面に対する要件はシンプルなので、
UIに関するロジックのユニットテストは手動ポチポチテストと一緒にやっちゃう、でも問題なくスケールする
2022/10/26(水) 15:16:34.54ID:Do8Z1/L1
Excelのあの膨大なコマンド全部手動テストすんの?
2022/10/26(水) 15:27:00.02ID:SDTA9bMp
MVVMじゃないとテストコード書けないと思ってる○○www
2022/10/26(水) 15:29:46.56ID:Do8Z1/L1
書けるけどさあ
結合テストだけって結局バグ取り切れないから意味ないんだよね
2022/10/26(水) 15:37:15.22ID:SDTA9bMp
テストコード書くためにMVVM選択するつうのは余りにもセンスがない
2022/10/26(水) 15:47:49.54ID:Do8Z1/L1
知らんのか?
今の開発はテスト最優先だぞ
しつこくXAML推しして他の言語disってたやつがBlazor知ったらすぐそれかい
2022/10/26(水) 16:08:44.17ID:kkDIWaCi
手動テストするって言っておきながら
テストコード書くと言われても突然前提ひっくり返すなよ
898デフォルトの名無しさん
垢版 |
2022/10/26(水) 16:08:54.14ID:V1iY34//
MVVMだと昔自分が書いたコード見てもシンプルで理解しやすいな
2022/10/26(水) 16:51:05.25ID:If5hDlW1
>>897
もしかしてロジック全部VMに書いてるの?だとしたらその方が問題だろう
普通はビュー(MVVMならVVM)とモデルの分離は大前提で、少なくともモデルはテスト書くでしょ
その上でビューのロジックの単体テストまで自動でやるかどうかというだけの話なわけだけど、なんか根本的なところを勘違いしてないかな
2022/10/26(水) 16:56:01.50ID:Do8Z1/L1
VMをテストすればVのテストは要らんわけだがこれを分離しないならVでバグる可能性もあって面倒だぞ
MAUIとかスマホでテストすんのか
2022/10/26(水) 17:03:18.84ID:If5hDlW1
いやMVVM使おうが画面と繋いで最終的な手動テストはさすがにやるだろう。
モデルの単体テスト、UIの手動テスト、そしてそれに加えてVMの単体テストを仮にやるなら、VMの単体テストで確認すべきは当然VM固有のロジックのみだ。
まあVMのロジックに対する網羅的なテストをUI経由で毎回やらなくていいから継続的な開発の効率化には寄与するだろう。
ただ、まともな組み方をしてれば一般的にはVMのロジックはかなり少ないはずで、そこまで大きな差にはならない。まともな組み方をしてればね。
2022/10/26(水) 17:07:13.67ID:kkDIWaCi
>>901
スレの流れ読めよ...
2022/10/26(水) 17:16:08.73ID:7O9MyaKx
だろおじさん登場
2022/10/26(水) 19:10:37.06ID:CC/Wl8Nq
うちの会社はテストコードなんて書かないぞ
2022/10/26(水) 19:39:25.80ID:r7FL/086
ロジックっつーか、どのコマンドを発したらどのプロパティがどう変わるかくらい単体テストでできるだろ
これ手作業でやんのかよw
2022/10/26(水) 19:44:42.44ID:uG7XKevD
テスターに任せればいいだろテストなんて
2022/10/26(水) 19:51:49.32ID:r7FL/086
人件費使うんかい
2022/10/26(水) 20:10:49.17ID:fUqihkJz
なんかエラーでたけど報告面倒やしOKにしとこ。
2022/10/26(水) 20:12:09.59ID:fUqihkJz
テスト終わりました。特に問題ありませんでした。
2022/10/26(水) 20:15:01.87ID:7O9MyaKx
テスト結果を口頭報告する世界
2022/10/26(水) 20:16:09.97ID:LaQM1xmg
>>886
あくまでイメージなだけで初心者がそれを信じてしまってるのがなぁ
2022/10/26(水) 20:21:04.01ID:eIY/KCa2
開発工数が削られると最後のテスト工数を削るしかなくなるんだよな
全体で見積もりだしても要件定義でダラダラするから工数足りなくなることなんてザラだし
913デフォルトの名無しさん
垢版 |
2022/10/26(水) 20:30:31.44ID:s6MGFJdq
「ちょっと変だったけど納品までには何とかなるだろ。」
2022/10/26(水) 20:48:16.75ID:5odk0wYq
とりあえずシステム起動できるかどうかだけは納品前に確認しておいてくれ
2022/10/27(木) 06:58:10.64ID:P8fdDGmw
>>912
コーディング段階で異常系を端折る
取り敢えず正常系が動けばOK
2022/10/27(木) 10:00:20.54ID:wzRrIng9
>>911
初心者というか田舎者
2022/10/27(木) 10:27:57.17ID:WURb7r0+
ListView等のItemTemplateにボタンなどを置いたとき
コードビハインドにイベントハンドラ置くのが一番楽だからな
頑張ってVMに置いても良いことなど一つもない
2022/10/27(木) 10:38:07.76ID:GOmw6fPY
ビハインドと共存できないMVVM原理主義者がいるのも事実。
一緒に仕事をした時はびっくりした思い出。
2022/10/27(木) 11:58:20.03ID:hjjQgQcY
>>917
んなこたない
一つのコマンドを共有してバインドしても手間は変わらん
2022/10/27(木) 12:14:41.44ID:J+iFb8i9
グラフコントロールとか実装しだすと
データバインデングとか糞過ぎるからな
2022/10/27(木) 14:24:40.22ID:6+qLeci9
1つのコマンドを複数のコントロールに割り当てるってほとんどなくないか?
ゲームのUIくらいじゃない?
2022/10/27(木) 14:36:21.65ID:hjjQgQcY
>>921
ListViewって書いてんじゃん
923デフォルトの名無しさん
垢版 |
2022/10/27(木) 18:31:17.41ID:Zv+DA8lJ
DataGridでわけわからなくなり、ListViewに。
ソースコピペしまくって一応動作したけど訳わからんわ。
924デフォルトの名無しさん
垢版 |
2022/10/27(木) 18:31:17.41ID:Zv+DA8lJ
DataGridでわけわからなくなり、ListViewに。
ソースコピペしまくって一応動作したけど訳わからんわ。
2022/10/27(木) 18:39:17.75ID:J+iFb8i9
複雑なコントロール操作が必要なとき
MVVMとか持ちだすとコードが滅茶苦茶になりがち

良く発生するのが、
バインデングの実行順序
2022/10/27(木) 18:43:12.60ID:hjjQgQcY
さすがにそれは設計が悪すぎる
2022/10/27(木) 19:45:45.68ID:wzRrIng9
コードビハインドだと
複数のプロパティに意図した順番で値を設定できるが、
さてバインデングではどうなるか?
考えた事すらないんではないか?

昔(なんせ10年以上も前)に調べて
ネット上の資料を見つけた事があるが
もう忘れてしまったね
2022/10/27(木) 19:50:35.80ID:hjjQgQcY
まずそんなことする必要がない
イニシャライズ以外でプロパティの設定順序によって動作が変わるような設計が悪い
それでも糞設計でどうしても順序が大事ならワンウェイバインディングにしてコマンドから設定すべき
2022/10/27(木) 20:16:29.17ID:wzRrIng9
>>928
あるコントロールの
プロパティA
プロパティB
プロパティC
にデータバインデングした
さて値が設定される順序はどう判断すればよい?
2022/10/27(木) 20:23:58.70ID:gHpKK6Hq
>>929
だから、そんな順番でロジックが変わるのがクソって話をしてんだがw
それでどうしても順番が大事ならコマンド使って順番に入れたらいいぞ
二回同じこと言ったけど読めるか?w
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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