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

■ このスレッドは過去ログ倉庫に格納されています
2022/01/20(木) 05:40:40.10ID:+TySdXxT
WPF(Windows Presentation Framework)について語るスレ。

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

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

コードを貼る場合は以下のサイトの利用をお勧め。
https://ideone.com/
481デフォルトの名無しさん
垢版 |
2022/02/25(金) 19:20:06.74ID:yOOIJPZ6
>>478
違う概念というが俺は元からスクロールについていってるんだが
横方向と縦方向と方向が違うが>>476はネストしたスクロール

UI的にカルーセルって言葉使いたいなら>>476はネストした
カルーセルじゃね
2022/02/25(金) 19:54:02.28ID:L/iFS/ue
ネストしたスクロールって親にも子にもスクロールバーが出るようなUIだぞ。
カルーセルはスクロールとは言わずにスライドとかページ切り替えと表現する。
2022/02/25(金) 21:12:24.61ID:yOOIJPZ6
それ以前にデザイン的じゃなくて技術的な観点から複数のコンポーネント間でUIイベントをやり取りしてスクロールを調整する動きをネストしたスクロールと表現してそういう前提で話を進めてたんだが
そこはわかりずらかったっぽいので悪かった
だから>>476のツールバーが消えたり隠れたりする動きも含めたり

androidならNestedScrollViewやらNestedScrollingParent

まぁ、そこらへんがflutterはくそ
2022/02/25(金) 21:29:28.09ID:Mlva5ec6
その辺は何でやってもクソな気が…(やりたくない
2022/02/27(日) 02:20:45.48ID:5PrhB3U9
いまからだとどうWPF勉強したらいいの?
2022/02/27(日) 02:22:27.16ID:o7kRBzLD
MSのドキュメント読むだけだろ。
2022/02/27(日) 08:52:36.15ID:WzYYvDDu
今からWPFなんてやっても仕事ないけどな
趣味なら好きなようにしていいが
2022/02/27(日) 09:40:55.29ID:COEkEbcq
かずきのWPF講座読んで、あとは使うならMVVMライブラリのチュートリアルでもやってみれば
2022/02/27(日) 10:20:56.98ID:ToDUQmf6
もはやユーザーが少なすぎてベストプラクティスもクソもない状態だから、自分の好きなように使えばいいよ
2022/02/27(日) 10:35:00.29ID:fVG8H20B
そうそう。MVVM警察気取りが幅を利かせてた痛々しい時代は過ぎ去ってアーキテクチャ固執主義は間違いだったと実証された。
コードビハインドにガンガン実装しても全然いいよ。
2022/02/27(日) 10:43:34.24ID:npDV8IYK
それは生存バイアスってやつだ
そもそも設計の良い悪いを言い出したらMVVM以前にこんな日の目を見なかったレガシー技術を採用すること自体が明らかに悪いわけで、
そういうことを気にしない人が残ってるだけ
2022/02/27(日) 10:50:36.47ID:NzDgaGJJ
かずきって懐かしいな
いまなにやってんだ?
2022/02/27(日) 10:51:25.63ID:NzDgaGJJ
>>490
WPFのMVVMが基地外なだけさ
2022/02/27(日) 13:45:33.61ID:riGTCXuy
>>487
身近なところや、「WPF 求人」で検索した結果を見ても仕事はあることはある。
他の人気のある言語と合わせて習得しておくのは悪くはないと思う。
2022/02/27(日) 19:41:21.55ID:ZIjTMYhr
MVVMって誇れるほど難しい技術でもないからw
逆にコレがわからないとしたら転職考えたほうが良いかも
2022/02/27(日) 19:44:43.16ID:o7kRBzLD
超ブラックのIT業界いるなら、しかもPGは底辺なのでさっさと転職したほうがいい。
2022/02/27(日) 21:02:08.91ID:Sj1PDpa0
>>492
日本マイクロソフト
2022/02/27(日) 21:12:32.76ID:+/7Q5xyF
>>495
わからないと言うより面倒と言う側面の方が強い
後はどうしたらよいか定番みたいなパターンがなかった
2022/02/28(月) 07:19:19.52ID:bo2jyn1E
今さらDispose()まで必須になったReactivePropety使うならナチュラルに書いた方がシンプルだし分かりやすい
2022/02/28(月) 08:37:02.02ID:yylMWC41
自分的にはReactivePropetyは最初から眼中にない。
ほぼ個人でメンテしているようなものは業務で使うのはありえないし、
わざわざメモリリークの爆弾仕込むようなものだし。
2022/02/28(月) 08:59:25.09ID:4BlM0ozS
>>456
.NET6のWinFormsデザイナ、まだベータ版だぞ。
スケーリング対応も多少改善されてるけど問題点はまだいくつも残ってるし、
そもそも固定配置前提のUIフレームワークは生産性低すぎて辛いだろう。
2022/02/28(月) 12:51:13.26ID:VFLmeVbD
やべー奴がいたw
https://mobile.twitter.com/ohbashunsuke/status/1495900842389610498
https://twitter.com/5chan_nel (5ch newer account)
2022/02/28(月) 13:42:58.27ID:33ipu5gN
>>501
業務アプリだと1画面にビシッとハマらなければならないのでGridでいい
逆にWindowsの「設定」みたいに画面スクロールしてーーとか出したら切られる
2022/02/28(月) 13:59:46.31ID:VFLmeVbD
>>503
Webアプリで目の肥えた客「ウィンドウサイズに応じて最適な項目配置に変わってね。縦長ウィンドウにしたら縦に並べて、横長にしたら横に並べてね。」
2022/02/28(月) 15:06:09.80ID:ki9qQxut
>>504
WinFormsでもFlowLayoutPanelてのがあった気が
2022/02/28(月) 15:41:54.06ID:nNPgEP9f
>>505
客「あっ、そうそう、文字サイズは5段階ぐらいで調節可能にしといてね」
2022/02/28(月) 15:57:41.97ID:ki9qQxut
>>506
それはきついかも…
508デフォルトの名無しさん
垢版 |
2022/02/28(月) 17:03:59.41ID:zvSrYpGE
テレワークで突然解像度1366x768のノートPCとかいう人権のない環境に叩き落された人もいる
古の業務ソフトには縦800が前提かつ、全ウィンドウでサイズ変更不可とかいうクソみたいな仕様を採用してるものが多いので
最下部のボタンが押せなくて仕事にならないって話をもう数件聞いてる
レスポンシブにする必要はないが画面サイズ固定は流石に時代遅れだと思う
2022/02/28(月) 17:20:47.12ID:ki9qQxut
>>508
それはそうなんだがWinFormsの場合はPanelを使った流動的なものでもフォントが変更されるとフォント次第ではコントロールの幅とかが変に…
かと言ってWPFはListBoxとかで工夫を加える場合面倒
2022/02/28(月) 22:55:13.95ID:eK9jJDC4
class ViewModel{
public ObservableCollection<Mail> Mails = ....
}

データグリッドでMailsをbindingして表示します。
データグリッドの各行ににチェックボックスを付けて、例えば一括して削除などの動作をしたい場合、MailクラスにIsCheckedなどのプロパティを追加する以外に良い方法はありますか?
Mailを継承した専用クラスを作ってそちらをbindingする方法も考えましたが、もっと簡単な、あるいは一般的な方法があれば教えて頂きたいです。
2022/02/28(月) 23:25:29.73ID:ARJn3fZ4
UIの状態をあらわすのがViewModelなんだから、Mail用のMailViewModelを作ってそっちにIsCheckedプロパティを追加する



class ViewModel {
 ObservableCollection<MailViewModel> MailViewModels =
}
512デフォルトの名無しさん
垢版 |
2022/02/28(月) 23:28:39.53ID:ARJn3fZ4
MVVM的にはViewにバインドさせるのはModelじゃなくてViewModel
Modelをそのままバインドできる要件ならViewModelを用意せず横着してもいいけど
513デフォルトの名無しさん
垢版 |
2022/03/01(火) 04:27:43.12ID:HvxAN7j1
こんな単純なことするのにも迷うMVVMゴミすぎる
本末転倒だよ…
2022/03/01(火) 08:15:49.02ID:6mHOWi1F
そういうのはMVVMに限らない。MVCだって学んでなけりゃ迷うわな。
2022/03/01(火) 10:13:10.94ID:Hsy6xGe8
ViewModelも使うけど加工する必要がないデータはModelから直接バインドしてます
最初のころは全てViewModel経由していたけど、その意味がわからなくなって
2022/03/01(火) 10:17:26.44ID:77YWD3uc
>>515
MVVM警察だ。お前を逮捕する
2022/03/01(火) 11:08:37.82ID:oU1D/s0E
>>515
Modelってことはコードビハインド?
ざっと触ってみた感じ、ViewModelとModelは別物だね

WinFormsとかみたいな場合はイベントとかで直接View、つまりコントロールをいじってた

これをWeb系みたくデザイナーとプログラマの役割分だけするためにイベントやModelで直接コントロールをいじることを禁止する
もちろん、表示・非表示の切り替えみたいなのは別で

ViewModelを介すことで直接コントロールを操作することを防ぐ

例えばListBoxの中身をデータバインディングした場合、ViewModelを操作(配列に対する操作とか)をしたらListBoxに反映される

…って妄想してる
2022/03/01(火) 11:21:43.44ID:2vaJYGq+
デスクトップ開発にデザイナーなんて職業は存在しない。
2022/03/01(火) 13:08:57.70ID:RNWoyucI
>>517
反映するにはオブザーバブルでないといけない
それがVM
2022/03/01(火) 13:33:00.63ID:xQ0S3wJN
>>518
デザイナーが居る場合はある
XAMLは作ってくれないし、デザイナーの指定したデザインの再現に苦労するのはプログラマだが
2022/03/01(火) 16:14:35.26ID:UDSzZfa0
>>513
だな
522デフォルトの名無しさん
垢版 |
2022/03/01(火) 17:02:09.29ID:mYgN9Bsp
採用すると生産性が落ちるアーキテクチャとか存在意義なくね?
プログラマーのオナニーでしかない
2022/03/01(火) 18:56:30.75ID:Tqcv2px3
>>511
これってMailViewModelの中にMailModelを保持すると思うけど、グリッドコントロールで行を消すとMailViewModelは消えるけどMailModelは消えずに残るよね?
そこは頑張ってコード書いて同期を取るしかない?
2022/03/01(火) 19:34:21.36ID:YC4P/K5p
ストレージから削除するなら
頑張って書いたほうがいい
525510
垢版 |
2022/03/01(火) 19:37:28.19ID:dYFnJIyt
皆さんありがとうございます。
class MailViewModel : Mail{
public IsChecked {
get => _isChecked;
set => SetProperty(ref _isChecked, value);
}
private _isChecked;
}

上記のようなクラスを作ってBindingするのが良さそうに思いました。
2022/03/01(火) 19:51:58.93ID:JcAvsTjQ
>>523
グリットコントロールから行を消すことがメールの削除の操作を意味するようにしたいならMailModelも消す
単に非表示にしたいだけとか、ゴミ箱に入れておいて復活させるようにさせたいとか、色々考えられる
だからViewModelが欲しくなったのさ
2022/03/01(火) 20:12:49.81ID:Tqcv2px3
>>526
なるほど。ケースによって対処は変わるよね。
ありがとう。
2022/03/02(水) 06:20:23.82ID:2pV2z6cL
Electronの葬式準備はできたか?
https://github.com/tauri-apps/tauri#comparison-between-tauri-and-electron
2022/03/02(水) 18:19:13.15ID:aIp73SHF
rustとか新しいのぼえとうないなぁ
2022/03/03(木) 05:36:04.02ID:uxaiIIsi
>>528
これは楽しみだな
2022/03/03(木) 09:44:18.37ID:Y3c36uTI
ここまで普及したElectronの牙城を崩すのは無理な気がする。せいぜいGoレベルだろう。
Electronがディスク使用量もメモリ使用量も超重量級なのは不満に思ってたけど。
2022/03/03(木) 10:21:20.83ID:8QQBVbSl
viewをhtmlとcssで書けないとつまらんよ
デザインがしょぼくなる
2022/03/03(木) 10:21:59.75ID:8QQBVbSl
WPFレベルでよければ可なのかもしれんが
2022/03/03(木) 11:12:38.88ID:4Us9YDJC
しょぼい方が評判良くて、デザイナーの自己満足全開デザインが使いづらい・分かりにくいと不評なのが現実
2022/03/03(木) 11:17:10.50ID:8QQBVbSl
>>534
あんたがセンス無いだけ
2022/03/03(木) 11:25:49.76ID:4Us9YDJC
>>535
まあそうやって逃げるしかないよな。
お前の仕事は無意味だって認めることになるんだから。
2022/03/03(木) 11:41:18.82ID:OeErkjB1
碌に使いもしないが権限だけは大きいエライオジサンのせいで見た目だけは派手だが使いづらいものになるのはまれによくあること
2022/03/03(木) 17:34:06.50ID:8kQ1SF/V
デザインセンス云々は置いといてhtml+cssのほうがデザインの幅が広いのは確か
予算があるならデザイナーにも頼めるしね
2022/03/03(木) 23:32:59.05ID:hgALKmrt
WPF+MVVM+Rxの実装について勉強中です
それぞれの各機能はなんとなく掴めてきたのですが、実装する場所や通知の受け取り方がまだ分かりません
例えばObservable.Intervalで指定した時間ごとにDBアクセスし、更新があれば通知するという処理はどのクラスに書くべきなのでしょうか
なんとなくですが、Mで実装しVMに通知、Vに表示と考えています
2022/03/04(金) 08:04:23.26ID:shwqyc/K
>>539
MVVMはあくまで、GUIの設計パターン。
DBアクセスのようなアプリの内部処理は
Mで包んでGUIの処理から隠されるので、
MVVMの処理フローには一切出てこない。

Mの原則は「GUIから見える状態に変化があれば通知する」。

この場合は、DBアクセスし、更新があり、
その結果としてGUIが更新が必要になったら、
Mに通知させるという処理になる。
2022/03/04(金) 09:46:05.06ID:EayDkyd8
大変わかりやすい
2022/03/04(金) 12:16:19.88ID:p2+DzLBF
お気に入りのアプリがWPFで実装されてて公開されてるから古いUIをWin 11のUIに合わせたくてForkしてWinUI3.0に対応させようと思ったらWindows App SDK 1.0だとAcrylicやMicaに対応してないとかズコーだわやっぱアホだわMSやることがすべて片手落ち
結局サードパーティー製のAcrylic実装を使う羽目になったわけだがこっちもろくすっぽメンテされてなくてWin11に対応してなくてダブルでズコー
たまにやる気になってプライベートでいじろうかと思ったらこれだからMSの開発環境ってマジでどうしようもないな
誰かWin11とVS2022で使える無料のAcrylic実装しらんかね?
2022/03/04(金) 12:27:44.21ID:7Zhud46/
>WinUI3はまだ完成していません。

一応MSもその認識はあったのね。
あんなお粗末な出来で自信を持って1.0として出したわけじゃないのね。
2022/03/04(金) 12:43:20.96ID:jlehksZI
>>542
WinUI選ぶくらいならこれ。

Flutter for Windows
・fluent_uiパッケージ
・flutter_acrylicパッケージ

Windows向けはまだ出たばかりだけど、
現時点の機能・品質、
フレームワークとしての出来、
将来性、
開発者の期待度
どう考えてみてもWinUIがFlutterに蹴散らされる未来しか思いつかない。

WinUIは

「これが最新らしいし、やってみるか」

「えっ?なにこれ、こんなしょぼいの?こんなこともできないの?」

って感じでちょっと触って実情に愕然として、さーっと離れていく。
2022/03/04(金) 16:27:48.56ID:KOjBrP/m
fluent_ui実際使うとちょっとアレ

modernwpfもそうだがやっぱ個人メンテじゃなー
Microsoftが手がけろよ
546デフォルトの名無しさん
垢版 |
2022/03/04(金) 16:40:32.17ID:KOjBrP/m
>>305
これにUnoPlatformとAvaloniaとXamarin(maui)も追加してくれんと

で、これも全部微妙という

クロスプラットとかUIフレームワークは人的リソースさかないと品質とかできないのにみんなで戦力分散して全部微妙品質
547デフォルトの名無しさん
垢版 |
2022/03/04(金) 16:41:15.22ID:KOjBrP/m
*品質とか維持できない
2022/03/04(金) 17:00:21.59ID:p2+DzLBF
>>544
おーサンキュー
だが流石に.NET FrameworkのレガシーアプリをFlutterでポーティングするほどの時間も熱意もないwww

とういかReactやFlutterが出る10年以上前から思ってたんだがなぜMSはXAMLとASP(Razor)を今でも別々に拡張してるのか理解に苦しむし頭が悪すぎる
まぁどうせ社内の派閥や政治でわけわからんこと繰り返してるんだろうけどその間に開発環境もシェア失ってしまったな
せめてどっちかに統一してUIの定義はCSS拡張にしないともうよっぽどの事情がないとこんなクソなフロントエンドフレームワークなんて誰も使わんぞ
理想を言えばさっさとXAMLとASPを窓から放り投げてTSとCSSで記述する新しいフロントエンドフレームワークを実装すべきだと思うんだがな
2022/03/04(金) 17:13:00.22ID:V0cJmevn
やるならDart使うか、同じようなJavascriptをリデザインした新言語を作って欲しい
2022/03/04(金) 19:51:13.51ID:p2+DzLBF
>>544
ところでFlutterってVS2022で環境構築できる?
拡張とプロジェクトテンプレートがあれば最高だけどまぁないか
Android StudioはエミュとSDK用にMacに入れてたけどくそ重くてVSCodeでReact Nativeばかり使ってるけどWinで試してみるかな
2022/03/04(金) 20:08:12.18ID:j9h/2ScS
みんな Flutterに行っちゃうのか..
552デフォルトの名無しさん
垢版 |
2022/03/04(金) 20:20:59.67ID:odUl/eCo
>>548
それなんてReact Native?(´・ω・`)
2022/03/04(金) 21:23:31.50ID:jlehksZI
>>550
VSCodeとFlutter拡張で開発できる。
Windows用ビルドするのにVS2019か2022を入れておく必要はある。
でも今2022の17.1.0のバグでデバッグモードが死んでて17.1.1待ち。
2022/03/04(金) 21:43:37.06ID:p2+DzLBF
>>553
React NativeもそうだけどFlutterもパッケージのバージョンで開発環境ぶっ壊れて死にそうになる感じかなのか?w
とりあえずVSCodeはReact Nativeに最適化してるから先にAndroid Studio試すわ
そろそろRemote-Containersを試したいんだが最近はコーディングより環境構築がくそムズくてめんどいんだよな
2022/03/04(金) 22:13:47.37ID:uA/ZaTOg
>>540
ありがとうございます
まだ追加で質問できるほどの知識もないので、手を動かしながら探ってみます
2022/03/04(金) 22:55:59.46ID:/OYyWF11
WPFもFlutterも両方入門者レベルだけど、Flutterのが馴染むなあ…
2022/03/04(金) 22:58:40.01ID:KOjBrP/m
じゃあ、先にFlutterでMVVM覚えてからWPFくればいい
そうすれば後覚えるのはxamlだけ
2022/03/04(金) 23:41:28.81ID:Ot1pbWlC
FlutterいいけどC++やりとうないな・・・
2022/03/04(金) 23:42:12.12ID:p2+DzLBF
とりあえずFlutterのWindows Desktop環境の構築終わってビルドしてみてDartの構文学んでるとこだがこれDartってまんまC#のパクリやんけwww
んでFlutterの構文はJSX(TSX)のパクリだなとりあえず状態管理がReduxみたいにクソじゃなければ文句ないわ
>>544のfluent_uiとfluent_acrylic試してみるわ
2022/03/05(土) 00:19:20.18ID:E2yAAp8N
DartはC#じゃなくてGoogleが再定義した中途半端なJavaでイラっとするんだよな
interfaceの定義が暗黙だったりinternalならプライベートメンバにアクセスできたりわざわざimplementsやextendsが必要で冗長だったりC#の方がよっぽどモダンだよ
2022/03/05(土) 01:14:27.39ID:V2Ahzg+A
WinUI3は今でもアプリ内のアクリルは有効だから、ベースに壁紙でも配置すればそれっぽいものにはなるんだがね
2022/03/05(土) 06:05:39.61ID:lIUzJS5r
>>560
DartはJavaScriptの置き換えを狙った言語。
TypeScriptみたいにJavaScriptの上位互換よりも
JavaScriptの古い部分を排除して新しく作り直したDartのアプローチの方が好き。
2022/03/05(土) 11:25:06.31ID:1jHFvDsl
>>562
は?Dartは静的型付けなんだけが?アンダスタン?
JSの置き換えが目的だが元はCだし動的型付けの進化系とか言っちゃうアホとはさすがに会話にならん・・・こんなレベル低い奴ばっかなのここ?
2022/03/05(土) 11:45:02.14ID:GCjMsc40
Heartだけは熱いぜ!
2022/03/05(土) 12:06:23.36ID:nwKZyNIL
>>563
レベル低いのはお前。
静的か動的かなんて話は一切してないぞ。
勝手に明後日の方角に突っ走って喚き散らして、そりゃお前と会話になるやつはいないだろうなぁw
2022/03/05(土) 13:10:04.52ID:GCjMsc40
性的か
愛的か

悩ましいところだ
2022/03/05(土) 13:26:38.14ID:mDTM2Slk
>>563の頭の悪さひどすぎだろw
2022/03/05(土) 13:37:05.84ID:sPneiazO
理詰めで論破されて悔しいけど反論できないから顔真っ赤でIDコロコロ自演して悪口とか恥ずかし過ぎるだろ
2022/03/05(土) 14:11:11.30ID:mDTM2Slk
理詰めって静的とか動的の話し誰もしてないのに、一人で突然型付けの話して論破って馬鹿すぎるw

誰もそんな話してねぇんだよww
技術的な話する以前の頭の悪さww
2022/03/07(月) 09:51:07.88ID:uEz3lV8K
WinUI 3.0の完成度は公式の認識ではまだ50%未満なんだな。
これをポジティブにとらえればいいのかネガティブにとらえればいいのか。
2022/03/07(月) 15:03:59.51ID:kOvQrFoW
動きのとろい奴は変化し続ける環境に追従できない
572デフォルトの名無しさん
垢版 |
2022/03/07(月) 15:12:43.80ID:xDt5CcEi
未だにWPFやってる奴が言うと説得力あるな
2022/03/07(月) 15:32:53.11ID:s7EYao7X
世界一のIDEであるVS(codeじゃない)とC#の出来の良さををすべてスポイルしてマイナスにしてしまうフレームワークしか作らないからな
MSは良い加減一貫性や統一性のない大企業病を修正しないと開発環境を失う時代はすぐそこまできてるぞ
2022/03/07(月) 17:19:40.02ID:zKkd3LGQ
WinUI3で、普通にペロッとzipなりで相手に渡せるexe作れる?
配置型強制とか開発者モードONならとかは避けたいのだが...
2022/03/07(月) 17:23:04.90ID:n4nlllf2
>>574
UnPackagedがある

でもファイルサイズでかいし、全体的にβ版品質だぞ
2022/03/07(月) 17:29:13.38ID:LEfSXXfI
>>574
は?githubでbuildしたバイナリごと公開すればいいだけなんだが・・・もしかしてこのスレってレベル低い雑魚専スレだった?www
2022/03/07(月) 17:35:52.60ID:n4nlllf2
>>576
もうその釣り方飽きた
2022/03/07(月) 17:43:33.51ID:uQvWeikk
みんなWPF使ってないのにスレはよく伸びるな。MSは釣りの達人だな。
2022/03/07(月) 17:55:02.83ID:jNxtjOjp
しれっとスレタイにWinUIも紛れてるからね
2022/03/07(月) 18:14:28.34ID:88DwHIqD
ReactivePropertyって便利ですか?
重かったりしませんか?
2022/03/07(月) 18:29:56.66ID:ekr02bKa
WPF使わない人が入れ替わり立ち替わりこのスレにやって来るのが逆に不思議だわ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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