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

レス数が950を超えています。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/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
2022/10/27(木) 20:42:08.19ID:xYfvETzj
プロパティABCが相互作用するのをイメージしてるんだろうけど
それをUI層で解決しようとするのが間違い
2022/10/27(木) 20:49:21.84ID:wzRrIng9
MVVMは単純なレベルで破綻するという事だ
本件意外にもモデルがダイアログと対話するだけでも大騒ぎになるのよ
結局MSのホワイトペーパー漁るはめになって苦しい言い訳しなきゃならん事になる
2022/10/27(木) 20:50:39.55ID:gHpKK6Hq
頭悪すぎて草しか生えんw
2022/10/28(金) 00:10:18.66ID:Rl5QKwW8
そんな順番に依存していたら、プログラミングなど出来ない

永遠にバグり続ける
2022/10/28(金) 00:13:33.88ID:2R4sDdk+
馬鹿だらけ?
2022/10/28(金) 06:24:13.52ID:55z/8PsZ
UIでの順序って、バリデーション時のチラ表示かな?
ビハインドでのカキコはレスポンスが大事な時と、フォーカス移動やDataGridやGridViewでの範囲選択処理ぐらいしか思いつかないが、他に何かある?
まぁ なんでもかんでもビハインドに書くのあれだし、DialogやMAUIのPopupやカスタムコントロールでもViewModelを作るMVVM教もなんかなぁーとは思う。
937デフォルトの名無しさん
垢版 |
2022/10/28(金) 07:14:58.92ID:YSrePaqP
勉強としてWINFORMのアプリ(CSV->DataGrid)をWPFに作り替えてるけど
面倒くささ300%増し。
表示するだけなら兎も角、特定のデータがあるカラムの文字色を変えるところで
難儀中。
サイトみたらもっとも難しいコントロールで、難しさから諦める人も多い とある。
諦めていいのか??
2022/10/28(金) 07:52:49.62ID:uO1xx4wy
必要ないなら諦めていいやろ
2022/10/28(金) 07:57:37.89ID:YfCj0B1j
>>937
何が難しいんだ
ItemsTemplateとValueConverter作るだけだろ
2022/10/28(金) 09:28:32.67ID:q/aBjBkx
>>919
ItemTemplate内のイベントはコードビハインド使わずに処理すると可也めんどいだろ
2022/10/28(金) 09:32:40.89ID:q/aBjBkx
結論はWindows SDK Appに移行すれば解決だな
イベントバインディングでVMにコードビハインドと変わらない理屈でコードが書けるし
単体テストも問題なく出来る
2022/10/28(金) 09:38:57.28ID:YfCj0B1j
>>940
XAML数行の何がめんどいんだよ
2022/10/28(金) 09:39:49.13ID:YfCj0B1j
ああイベントと書いてるな
なぜイベントw
2022/10/28(金) 09:43:12.99ID:YfCj0B1j
>>941
それだとsenderがobjectじゃん
2022/10/28(金) 09:44:24.09ID:q/aBjBkx
>>942
ビジュアルステートって数行じゃ終わらないだろ
それとWinUIだとItemTemplateの内部じゃ使えないからイベントハンドラ呼んだほうが早い
2022/10/28(金) 09:53:18.43ID:og172vo+
>>945
なんでステート使うんだ
コンバーター作ってるんだからそれをBackGroundにバインドして数行で終わるだろ
2022/10/28(金) 10:10:10.03ID:YfCj0B1j
ここまで読んでわかったけど結局お前らが難しいと言ってるのはMVVMじゃなく単一責任原則と疎結合なんだよ
それはモダンプログラミングの基本だからそれが難しいと言うことは自分にプログラマの素質が無いと自分で言ってるようなもんだぞ
2022/10/28(金) 10:11:38.46ID:q/aBjBkx
>>946
コードビハインド使わずにイベントを拾うならビジュアルステートだろうに
コンバーターならデータの中身しか使えない
2022/10/28(金) 10:15:18.37ID:og172vo+
>>948
データによって色を変えるんだからそれで問題ないぞ
2022/10/28(金) 10:18:09.68ID:q/aBjBkx
>>949
それは別件
2022/10/28(金) 10:24:04.64ID:og172vo+
突然別件になったな
2022/10/28(金) 10:26:46.35ID:55z/8PsZ
まぁ DataGridの部分選択、部分範囲状態をスキャンするめに、ViewModelからViewを参照する人もいるからな。
そこまでして、ViewModelでやる意思は凄い。
当然、SRPなどというクリーンアーキに住んでいない人の方が多い。
2022/10/28(金) 10:29:40.93ID:q/aBjBkx
>>951
レスを辿れば分かるよ
そっちの話は最初からしていない
2022/10/28(金) 11:54:54.19ID:IFywMyP/
レスを辿るとそこに行き着くんだがw
2022/10/28(金) 11:55:27.34ID:IFywMyP/
>>952
結局疎結合がわかってないというだけ
2022/10/28(金) 11:56:51.55ID:6hLKpWK1
DataGrid継承してオレオレDG作ればコードビハインドじゃなくなるからオススメ
2022/10/28(金) 12:34:48.15ID:vMzkXF6c
次バージョンとかで改良されたりしないの?
2022/10/28(金) 12:40:36.14ID:nannj+G2
どのバージョンでも疎結合を知らないプログラマは厳しいよ
2022/10/28(金) 13:30:28.07ID:wAzqHAGQ
WPFはMS的には既にレガシー扱いで開発終了してるからこの先新機能が入ることはない
2022/10/28(金) 14:04:09.12ID:nannj+G2
かと言ってWinUIやMAUIにはすぐに置き換えられんからなあ
INotifyDataErrorInfoにすら対応してないWinUIの完成度よ
961デフォルトの名無しさん
垢版 |
2022/10/28(金) 15:41:37.26ID:iZqLOJxY
MVVMやりたくない人にこそWinUIなんだよな
2022/10/28(金) 15:52:58.93ID:nannj+G2
WinUIでMVVMできるしまだそれが推奨だぞ
そのうちMVUになるから絶望しろ
2022/10/28(金) 15:58:50.22ID:Qu1tKuJC
VisualStateってのがあるのか
2022/10/28(金) 17:36:35.58ID:55z/8PsZ
>>956
そこまで気が回る人なら、MVVM真理教でのたうち回っていない。
問題解決能力が全てだという事を肝に銘じていない人に何を言っても聞く耳は持たない。
クリーンアーキはMVVMの基本で、インターフェースで繋ぐ方向が全てだ教えても、10年変わらない奴は、それだけの存在。
DataGridを継承してINotifyChange含むプロパティーを追加するなどという発想がでるわけもない。
2022/10/28(金) 17:56:34.47ID:2R4sDdk+
>>936
要件が簡単すぎる

設定パネルUIに複数のインジゲータUIをバインド

表示データーはさらに別のスレッドからバインド

監視系だとこんなんザラでしょ
2022/10/28(金) 18:12:41.55ID:YfCj0B1j
>>965
それのどこが複雑なんだ?
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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