X



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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0851デフォルトの名無しさん
垢版 |
2022/10/23(日) 23:16:12.48ID:UYu25ZB7
データバインディングの勉強目的なら最初は何も使わずにINotifyChangedPropertyぐらい自前実装でいいだろ
10行未満なんだし
0852デフォルトの名無しさん
垢版 |
2022/10/24(月) 05:52:10.08ID:KSxIdWu8
バィンディングっていろいろ手法があるみたいでその辺も混乱の元ですね!
0853デフォルトの名無しさん
垢版 |
2022/10/24(月) 08:24:55.30ID:faJr3BKh
INotifyChangedPropertyの実装に関しては、prismもmicrosoft.toolkitもほぼ同じもの
Xaml側は全く同じだからどのHPを見ても何も問題ないんだけどね
prismで勉強して、些末な違いをMSのドキュメントで補完すればいいんじゃないかな
0854デフォルトの名無しさん
垢版 |
2022/10/24(月) 09:19:40.79ID:1MyEkAqJ
React界隈じゃ
不用なのものを徹底的に排除して突き詰めてるのに、

XAML界隈は
ライブラリー!ライブラリー!ライブラリー!
ドヤ顔ライブラリー房のこの違い...
0856デフォルトの名無しさん
垢版 |
2022/10/24(月) 14:16:41.10ID:qez9jhSx
x:Bindのない環境には戻れなくなったな
0862デフォルトの名無しさん
垢版 |
2022/10/24(月) 18:46:31.31ID:DN4O5MAE
UWP作ってないしx:bind使ったこと無かったわ
その使い心地を見せて貰おうかっ
0863デフォルトの名無しさん
垢版 |
2022/10/24(月) 20:07:56.89ID:KSxIdWu8
>>850
今日入れてみた。試してみる。
いろいろフレームワーク大すぎ。
MSが良いもの出さないからか。
こっちでの開発ではプリズム、
異動先ではReactiveProperty使用とか。
難儀やなぁ。
0864デフォルトの名無しさん
垢版 |
2022/10/24(月) 20:38:47.05ID:TU0Y+jHJ
x:bindはUWPでコンパイル時バインドで速いという触れ込みがあったから使ったみたが速度差体感できずコンパイル時の型チェックもうざいので俺はbindindに戻ったけど
0868デフォルトの名無しさん
垢版 |
2022/10/25(火) 18:12:35.24ID:ZpBlkdg7
x:Bindはイベントがバインド出来てFormsのやり方MVVMででコーディングできるんだっけど
そこらへんをアピールするつもりはないようだね
ビヘイビアが難しいわけじゃないけど冗長だから使わずに済むのも大きいね
0870デフォルトの名無しさん
垢版 |
2022/10/25(火) 18:58:07.50ID:tQ39k2n1
どういうケースを想定してるのかわからんわ
disabledの時に消せばいいんじゃないのか?
0871デフォルトの名無しさん
垢版 |
2022/10/25(火) 19:22:02.07ID:ZIbwJZxR
そもそも表示しない
表示するが無効
表示するが有効
この3通りをやりたい時がある
0873デフォルトの名無しさん
垢版 |
2022/10/25(火) 19:30:03.09ID:tQ39k2n1
そんなことしたいと思ったことないからわからんけどコマンドとのバインディングでしなきゃいけないなら継承するしかないな
俺ならViewModelのプロパティを使うが
0874デフォルトの名無しさん
垢版 |
2022/10/25(火) 19:33:01.57ID:ZIbwJZxR
例えば、ログイン機能があるアプリとかでログインしてなきゃ更新ボタンをそもそも表示しない
で、ログインして更新ボタンを押して更新中になったら一時的に無効に切り替えてとか
たまに、表示/非表示と有効/無効を別に扱いたいときがある
0876デフォルトの名無しさん
垢版 |
2022/10/25(火) 19:39:39.54ID:qnnhkHib
それログインボタン以外の管理用機能が必要になった時どうすんの
管理者フラグをVMに用意して管理者用コントロールパネルごと消すべきだろ
個々のコマンドじゃなく
0877デフォルトの名無しさん
垢版 |
2022/10/25(火) 19:46:40.08ID:ZIbwJZxR
例えが悪いなら謝るが
別にボタンの他に、メニューにバインドされる可能性だってあるし
俺が昔必要に思った時のケースは思い出せねぇわ
0878デフォルトの名無しさん
垢版 |
2022/10/25(火) 20:07:37.74ID:IkY374Tt
MVVM? 初心者だがやはり有用性が理解できんw
0879デフォルトの名無しさん
垢版 |
2022/10/25(火) 20:12:35.43ID:qnnhkHib
そりゃ初心者は理解できんかもな
大きく複雑なプログラムを作る時に威力を発揮するものだから
0880デフォルトの名無しさん
垢版 |
2022/10/25(火) 20:16:47.78ID:IkY374Tt
>>879
らしいね。
みんなもそうな大きく複雑なもの作ってるんだ?
0881デフォルトの名無しさん
垢版 |
2022/10/25(火) 21:19:57.69ID:YzZqh/Jo
そもそも世の中に転がってるシステムに疎結合なんて不要な気がするわ
設計に時間かけれる人は自己満足でやってもいいかもしれないけど
0883デフォルトの名無しさん
垢版 |
2022/10/25(火) 21:43:21.12ID:M72P4hA2
WPFの主用途はゴリゴリの業務アプリだから、複雑なのはUIではなく業務フローなんだよね
ただ画面数が多いだけだ
0884デフォルトの名無しさん
垢版 |
2022/10/25(火) 21:46:12.07ID:IkY374Tt
バレない程度にどんなもん作ってんだい?
0885デフォルトの名無しさん
垢版 |
2022/10/25(火) 22:04:24.76ID:IkY374Tt
>>881
UIとロジックは疎結合にしろ、てもう聞き飽きた。
そんなに大事なんかね。
0886デフォルトの名無しさん
垢版 |
2022/10/25(火) 22:37:19.01ID:YzZqh/Jo
>>885
VMが出てきたせいで、コードビハインドは悪、画面に関わるコードはすべてVMに書くべきってイメージが出来ちゃったのがなぁ
0887デフォルトの名無しさん
垢版 |
2022/10/25(火) 22:39:03.01ID:xY6yVmpD
それ狂信者が勝手に言ってるだけだぞ
マイクロソフトはむしろコードビハインドを推奨してる
0889デフォルトの名無しさん
垢版 |
2022/10/26(水) 05:51:47.91ID:s6MGFJdq
>>883
しかも業務アプリって見栄えはあまり
重視せず、使い勝手や速度が優先されるからな。
ボタンが回転したりそんなのどうでもいいわ。

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

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

ユニットテストが要らないような規模のプロジェクトなら好きにすればいいのではないかと。
0891デフォルトの名無しさん
垢版 |
2022/10/26(水) 14:44:53.94ID:JLiTjZTy
規模といっても色々あるからね
大抵の業務アプリでは全体としてどれほど大規模で複雑なシステムでもただ画面数が多いだけで個々の画面に対する要件はシンプルなので、
UIに関するロジックのユニットテストは手動ポチポチテストと一緒にやっちゃう、でも問題なくスケールする
0894デフォルトの名無しさん
垢版 |
2022/10/26(水) 15:29:46.56ID:Do8Z1/L1
書けるけどさあ
結合テストだけって結局バグ取り切れないから意味ないんだよね
0896デフォルトの名無しさん
垢版 |
2022/10/26(水) 15:47:49.54ID:Do8Z1/L1
知らんのか?
今の開発はテスト最優先だぞ
しつこくXAML推しして他の言語disってたやつがBlazor知ったらすぐそれかい
0897デフォルトの名無しさん
垢版 |
2022/10/26(水) 16:08:44.17ID:kkDIWaCi
手動テストするって言っておきながら
テストコード書くと言われても突然前提ひっくり返すなよ
0898デフォルトの名無しさん
垢版 |
2022/10/26(水) 16:08:54.14ID:V1iY34//
MVVMだと昔自分が書いたコード見てもシンプルで理解しやすいな
0899デフォルトの名無しさん
垢版 |
2022/10/26(水) 16:51:05.25ID:If5hDlW1
>>897
もしかしてロジック全部VMに書いてるの?だとしたらその方が問題だろう
普通はビュー(MVVMならVVM)とモデルの分離は大前提で、少なくともモデルはテスト書くでしょ
その上でビューのロジックの単体テストまで自動でやるかどうかというだけの話なわけだけど、なんか根本的なところを勘違いしてないかな
0900デフォルトの名無しさん
垢版 |
2022/10/26(水) 16:56:01.50ID:Do8Z1/L1
VMをテストすればVのテストは要らんわけだがこれを分離しないならVでバグる可能性もあって面倒だぞ
MAUIとかスマホでテストすんのか
0901デフォルトの名無しさん
垢版 |
2022/10/26(水) 17:03:18.84ID:If5hDlW1
いやMVVM使おうが画面と繋いで最終的な手動テストはさすがにやるだろう。
モデルの単体テスト、UIの手動テスト、そしてそれに加えてVMの単体テストを仮にやるなら、VMの単体テストで確認すべきは当然VM固有のロジックのみだ。
まあVMのロジックに対する網羅的なテストをUI経由で毎回やらなくていいから継続的な開発の効率化には寄与するだろう。
ただ、まともな組み方をしてれば一般的にはVMのロジックはかなり少ないはずで、そこまで大きな差にはならない。まともな組み方をしてればね。
0905デフォルトの名無しさん
垢版 |
2022/10/26(水) 19:39:25.80ID:r7FL/086
ロジックっつーか、どのコマンドを発したらどのプロパティがどう変わるかくらい単体テストでできるだろ
これ手作業でやんのかよw
0912デフォルトの名無しさん
垢版 |
2022/10/26(水) 20:21:04.01ID:eIY/KCa2
開発工数が削られると最後のテスト工数を削るしかなくなるんだよな
全体で見積もりだしても要件定義でダラダラするから工数足りなくなることなんてザラだし
0913デフォルトの名無しさん
垢版 |
2022/10/26(水) 20:30:31.44ID:s6MGFJdq
「ちょっと変だったけど納品までには何とかなるだろ。」
0917デフォルトの名無しさん
垢版 |
2022/10/27(木) 10:27:57.17ID:WURb7r0+
ListView等のItemTemplateにボタンなどを置いたとき
コードビハインドにイベントハンドラ置くのが一番楽だからな
頑張ってVMに置いても良いことなど一つもない
0918デフォルトの名無しさん
垢版 |
2022/10/27(木) 10:38:07.76ID:GOmw6fPY
ビハインドと共存できないMVVM原理主義者がいるのも事実。
一緒に仕事をした時はびっくりした思い出。
0920デフォルトの名無しさん
垢版 |
2022/10/27(木) 12:14:41.44ID:J+iFb8i9
グラフコントロールとか実装しだすと
データバインデングとか糞過ぎるからな
0921デフォルトの名無しさん
垢版 |
2022/10/27(木) 14:24:40.22ID:6+qLeci9
1つのコマンドを複数のコントロールに割り当てるってほとんどなくないか?
ゲームのUIくらいじゃない?
0923デフォルトの名無しさん
垢版 |
2022/10/27(木) 18:31:17.41ID:Zv+DA8lJ
DataGridでわけわからなくなり、ListViewに。
ソースコピペしまくって一応動作したけど訳わからんわ。
0924デフォルトの名無しさん
垢版 |
2022/10/27(木) 18:31:17.41ID:Zv+DA8lJ
DataGridでわけわからなくなり、ListViewに。
ソースコピペしまくって一応動作したけど訳わからんわ。
0925デフォルトの名無しさん
垢版 |
2022/10/27(木) 18:39:17.75ID:J+iFb8i9
複雑なコントロール操作が必要なとき
MVVMとか持ちだすとコードが滅茶苦茶になりがち

良く発生するのが、
バインデングの実行順序
0927デフォルトの名無しさん
垢版 |
2022/10/27(木) 19:45:45.68ID:wzRrIng9
コードビハインドだと
複数のプロパティに意図した順番で値を設定できるが、
さてバインデングではどうなるか?
考えた事すらないんではないか?

昔(なんせ10年以上も前)に調べて
ネット上の資料を見つけた事があるが
もう忘れてしまったね
0928デフォルトの名無しさん
垢版 |
2022/10/27(木) 19:50:35.80ID:hjjQgQcY
まずそんなことする必要がない
イニシャライズ以外でプロパティの設定順序によって動作が変わるような設計が悪い
それでも糞設計でどうしても順序が大事ならワンウェイバインディングにしてコマンドから設定すべき
0929デフォルトの名無しさん
垢版 |
2022/10/27(木) 20:16:29.17ID:wzRrIng9
>>928
あるコントロールの
プロパティA
プロパティB
プロパティC
にデータバインデングした
さて値が設定される順序はどう判断すればよい?
0930デフォルトの名無しさん
垢版 |
2022/10/27(木) 20:23:58.70ID:gHpKK6Hq
>>929
だから、そんな順番でロジックが変わるのがクソって話をしてんだがw
それでどうしても順番が大事ならコマンド使って順番に入れたらいいぞ
二回同じこと言ったけど読めるか?w
0931デフォルトの名無しさん
垢版 |
2022/10/27(木) 20:42:08.19ID:xYfvETzj
プロパティABCが相互作用するのをイメージしてるんだろうけど
それをUI層で解決しようとするのが間違い
0932デフォルトの名無しさん
垢版 |
2022/10/27(木) 20:49:21.84ID:wzRrIng9
MVVMは単純なレベルで破綻するという事だ
本件意外にもモデルがダイアログと対話するだけでも大騒ぎになるのよ
結局MSのホワイトペーパー漁るはめになって苦しい言い訳しなきゃならん事になる
0934デフォルトの名無しさん
垢版 |
2022/10/28(金) 00:10:18.66ID:Rl5QKwW8
そんな順番に依存していたら、プログラミングなど出来ない

永遠にバグり続ける
0936デフォルトの名無しさん
垢版 |
2022/10/28(金) 06:24:13.52ID:55z/8PsZ
UIでの順序って、バリデーション時のチラ表示かな?
ビハインドでのカキコはレスポンスが大事な時と、フォーカス移動やDataGridやGridViewでの範囲選択処理ぐらいしか思いつかないが、他に何かある?
まぁ なんでもかんでもビハインドに書くのあれだし、DialogやMAUIのPopupやカスタムコントロールでもViewModelを作るMVVM教もなんかなぁーとは思う。
0937デフォルトの名無しさん
垢版 |
2022/10/28(金) 07:14:58.92ID:YSrePaqP
勉強としてWINFORMのアプリ(CSV->DataGrid)をWPFに作り替えてるけど
面倒くささ300%増し。
表示するだけなら兎も角、特定のデータがあるカラムの文字色を変えるところで
難儀中。
サイトみたらもっとも難しいコントロールで、難しさから諦める人も多い とある。
諦めていいのか??
0941デフォルトの名無しさん
垢版 |
2022/10/28(金) 09:32:40.89ID:q/aBjBkx
結論はWindows SDK Appに移行すれば解決だな
イベントバインディングでVMにコードビハインドと変わらない理屈でコードが書けるし
単体テストも問題なく出来る
0945デフォルトの名無しさん
垢版 |
2022/10/28(金) 09:44:24.09ID:q/aBjBkx
>>942
ビジュアルステートって数行じゃ終わらないだろ
それとWinUIだとItemTemplateの内部じゃ使えないからイベントハンドラ呼んだほうが早い
0946デフォルトの名無しさん
垢版 |
2022/10/28(金) 09:53:18.43ID:og172vo+
>>945
なんでステート使うんだ
コンバーター作ってるんだからそれをBackGroundにバインドして数行で終わるだろ
0947デフォルトの名無しさん
垢版 |
2022/10/28(金) 10:10:10.03ID:YfCj0B1j
ここまで読んでわかったけど結局お前らが難しいと言ってるのはMVVMじゃなく単一責任原則と疎結合なんだよ
それはモダンプログラミングの基本だからそれが難しいと言うことは自分にプログラマの素質が無いと自分で言ってるようなもんだぞ
0948デフォルトの名無しさん
垢版 |
2022/10/28(金) 10:11:38.46ID:q/aBjBkx
>>946
コードビハインド使わずにイベントを拾うならビジュアルステートだろうに
コンバーターならデータの中身しか使えない
レス数が950を超えています。1000を超えると書き込みができなくなります。

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