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

■ このスレッドは過去ログ倉庫に格納されています
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/12(水) 23:01:57.24ID:Niawwtef
イベントハンドラー方式で
誰かが解説すればよい

オレがやっても良いんだけど
時が立ちすぎたからなーー
2022/10/13(木) 00:45:50.00ID:odFy/WrJ
.net3.5の頃に初めてwpf触ったときに戸惑ったのはマトモにポトペタが出来なかったことだな
739デフォルトの名無しさん
垢版 |
2022/10/13(木) 09:24:08.91ID:lFVyqjgf
MVVMは他のところでも使われてるんだが?
2022/10/13(木) 10:58:26.86ID:fzJDj2RS
WPFのが糞なだけだね
実態はblandのライブラリーがベースだし
2022/10/13(木) 21:53:46.94ID:eogdk5TR
>>739
とっくに廃れてるよ。どの界隈でもMVVMは時代遅れ。
2022/10/13(木) 21:58:45.26ID:eogdk5TR
>>736-737
これは?
https://zenn.dev/apterygiformes/books/470ba1042dfbef
2022/10/13(木) 22:13:58.22ID:3gX/khO/
>>736
べつに普及するとか関係なくない?使いたきゃ使えばいいだけ。
2022/10/13(木) 22:15:16.53ID:fzJDj2RS
>>742
リストデータの追加、編集、削除の実装解説が無い
初心者が分かんないのはここだと思う
2022/10/13(木) 22:21:08.68ID:eogdk5TR
画面イメージしか見てないがアラームアプリがそれっぽい
2022/10/13(木) 22:30:27.40ID:Hoazl96G
>>741
今の主流は何なの?
2022/10/13(木) 22:30:28.68ID:fzJDj2RS
>>745
リストボックスじゃダメだろ

データ一件毎に入力コンントロールと削除ボタンが最低無きゃ

あと外部からリストに表示されたコンントロールにアクセスする方法ぐらいは最低無いと
2022/10/13(木) 22:36:26.35ID:fzJDj2RS
>>746
データフローは双方向でなくて単一方向
2022/10/14(金) 06:45:39.98ID:rd0u41Iv
>リストボックスじゃダメだろ

WPF本当に使ったことある?
2022/10/14(金) 06:59:40.14ID:t5o5qpLS
>>747
何を言ってるのか全くわからん
どういうのをイメージしてんの?
2022/10/14(金) 10:03:49.72ID:yNZTqU3N
>>749
ヾ(-д-;)オイオイ.. 10年以上前になるけど特別仕様のコントロールを作りにアチコチのプロジェクトにお邪魔してたぞ昔は!株価チャート、ガントチャート、スケジューラー...etc

>>750
この手の要件だとtodo listが一般的じゃね?
React、Ember、Vue、Svelte、Angularが揃ってるみたいだから同じようにWPF版を足してみたら?
https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks/React_todo_list_beginning
2022/10/14(金) 10:11:32.89ID:t5o5qpLS
>>751
なんか知らんけどお前が古いわ
753デフォルトの名無しさん
垢版 |
2022/10/15(土) 07:20:45.37ID:XQPIem9+
WPF + データバインディング 勉強始めようと思って検索したら
http://work-professor.org/?p=626
を見つけたんだがここの手練れに質問。

データバインディングの方が面倒 & バグが入りやすい と思ったんだが
どうなんだ?

ページの下の「まとめ」では
データバインドはWindowsフォームアプリケーション開発では当たり前に
使われる方法です。

とあるんだがWinFormsの開発でデータバインドが普通なの?!

お教えください!
2022/10/15(土) 08:44:46.43ID:3NQ8H/va
ここはWPFスレなのでWindowsFormはスレ違い

なおデータバインドなんて旧VBでもある
2022/10/15(土) 08:49:31.30ID:TYEHa44m
どうなんだって言われても違うぞと答えりゃいいのか
どんなバグが入りやすいと思ったのかくらい説明しろよw
756デフォルトの名無しさん
垢版 |
2022/10/15(土) 08:57:41.01ID:XQPIem9+
>>754
だからWPFについて聞いてんじゃん。
大丈夫?
2022/10/15(土) 09:03:17.18ID:TYEHa44m
>>753
> とあるんだがWinFormsの開発でデータバインドが普通なの?!
ん?
758デフォルトの名無しさん
垢版 |
2022/10/15(土) 09:07:21.62ID:XQPIem9+
>>757
それは最後にちょっこ聞いただけでメインは
上部のWPFについてだろ。
2022/10/15(土) 09:09:45.32ID:E+9ofSSz
並列に聞いてる二つのどっちがメインとか知らんがな
普通は最後に聞いてる方がメインと思われるから覚えとけ
2022/10/15(土) 09:15:18.50ID:JdRxG2Pv
>>758
最初の3文字以外はWindowsFormの話題にしか見えない
2022/10/15(土) 09:17:26.52ID:E+9ofSSz
前提や状況説明などの導入を先に書いて後から本題に入るのを覚えよう
本題を先に書いて後から蛇足を付け加える時には「蛇足だが」「それと」「ついでに」などの接続詞でそれが蛇足であることを明確にしよう
2022/10/15(土) 09:26:56.63ID:rzXU5vcB
>>753
その例では説明のためかIPropertyChanged関連をべた書きしてるけど、普通はメソッドを用意してもっとシンプルに書く。

private string _inputTextBox1Text = string.Empty;
public string InputTextBox1Text
{
get => _inputTextBox1Text;
set => SetProperty( ref _inputTextBox1Text, value );
}
2022/10/15(土) 09:29:17.67ID:rzXU5vcB
INotifyPropertyChangedだった
2022/10/15(土) 09:29:43.50ID:2u2iBEwS
そもそも>>755を無視して大丈夫?とか頭おかしい
2022/10/15(土) 09:32:50.31ID:TYEHa44m
>>762
今はもっとシンプルに書ける(communitytoolkitを使う場合)
https://learn.microsoft.com/ja-jp/dotnet/communitytoolkit/mvvm/generators/observableproperty
766デフォルトの名無しさん
垢版 |
2022/10/15(土) 09:36:32.22ID:XQPIem9+
>>762
ありがとうございます。
INotifyPropertyChanged()使わず、
シンプルに記述できるなら貴方の方が
良いですね。
INotifyPropertyChanged()がどうしても
必要なケースってあるんですか。
2022/10/15(土) 09:36:47.04ID:8pCFn/kA
>>751
本当にWPF触ったことあるならリストボックスでそれらを実現できることぐらいわかるよね。
2022/10/15(土) 09:41:12.62ID:E+9ofSSz
>>766
大丈夫か?w
2022/10/15(土) 10:09:21.22ID:rzXU5vcB
>>766
INotifyPropertyChanged.PropertyChangedのことだろうが、
SetProperty()の中でそれを処理するようにするだけで、使わない訳じゃない。
2022/10/15(土) 10:46:17.73ID:addGKIWP
INotifyPropertyChanged()って何も分かってないだろ。
771デフォルトの名無しさん
垢版 |
2022/10/15(土) 11:15:36.77ID:XQPIem9+
ぼく?
何も知りません。知ってるのはwinforms(C#)とMFC(C++)位。
2022/10/15(土) 11:19:46.15ID:oWoBYw4V
インターフェースとメソッドの区別がついてないからそれらも知らんだろって言われてるんだぞ
773デフォルトの名無しさん
垢版 |
2022/10/15(土) 12:12:54.06ID:XQPIem9+
そんな揚げ足とらなくても..
2022/10/15(土) 12:21:46.06ID:iAi/3wxd
わざと叩かれようとしてるのかと思うレベル
2022/10/15(土) 12:52:59.45ID:zYlZ5bY9
>>753
リンク踏んでみたけどどう見てもwinformsだぞ
Form1とか書いてあるし
頭大丈夫か?
2022/10/15(土) 12:56:47.51ID:rzXU5vcB
INotifyPropertyChangedの実装はどちらでも変わらないから敢えて無視してレスしたけど、
>>753はWinFormsのデータバインディングの説明。
WPFのデータバインディングを知りたいなら別の例を探した方が良いね。
2022/10/15(土) 13:01:46.58ID:zYlZ5bY9
>>756
2022/10/15(土) 14:48:22.82ID:F6SpEMOp
どっちにしてもデータバインディングでこんなメンドクサイ時点で古いんだよw
当時からゴミと思ってた部分だw
vue.jsとかやってからだと絶対やりたくないw
779デフォルトの名無しさん
垢版 |
2022/10/15(土) 14:56:32.45ID:XQPIem9+
あれ、ちょっと勘違いしたかも。
ところで、こんなはザムルは自分で書けるの?
2022/10/15(土) 14:59:19.57ID:zYlZ5bY9
俺は書けるがお前は書けないんじゃね
781デフォルトの名無しさん
垢版 |
2022/10/15(土) 15:12:04.55ID:F3Of1tUC
WPFやWinUIでのMVVMはCommunityToolkit使えばいいって感じになったみたいだな
統一されてる分昔よりマシだな
2022/10/15(土) 17:11:56.91ID:v+8OtpSj
ぶっちゃけ、世の中に溢れてるシステムのUIなんてWinformsで十分なんだよな
無理に最新技術を使う必要ない気がするわ
783デフォルトの名無しさん
垢版 |
2022/10/15(土) 17:23:18.30ID:F3Of1tUC
XAMLで簡単にUI作れる方がいい
2022/10/15(土) 18:38:28.19ID:s858Kg5J
>>783
簡単にUIの入れ替えね。 
ピクセル単位の画面デザイントリミングもXAMLホットリロードのメリットだけど、それ以上に入れ替えが簡単。
785デフォルトの名無しさん
垢版 |
2022/10/15(土) 19:23:17.01ID:XQPIem9+
>>780
いやいや、スゴイね。
微調整はともかく、やっぱりポトペタしか
できんわ。
2022/10/16(日) 06:43:26.17ID:mJXNQh6A
>>782
UI的にWinFormsで十分でもWPFで作ったらもっと楽できる。
MVVMは使う必要ないよ。
プログラム初心者ほど「WPFはMVVMで作らなきゃいけないんです!」みたいなこと言うけどね。
MVVMで組んで楽な場合とそうでない場合の見極めがまだできませんって白状しているようなもの。
787デフォルトの名無しさん
垢版 |
2022/10/16(日) 08:30:12.62ID:OVnfavOi
>>782
同じ理由でWPFでも十分なんだよな
もう「最新」でもないし

慣れた方で作ればいい
どっちにも慣れているなら、自由度が高いWPFを選んどくべき
788デフォルトの名無しさん
垢版 |
2022/10/16(日) 08:50:09.89ID:+WFeYHV0
遅いけどね。
789デフォルトの名無しさん
垢版 |
2022/10/16(日) 09:22:04.05ID:Lttjv/2U
こういう感じのチャート画面(上段)を作りたいときって
WPFだとどう構築するのがいいんですかね
https://www.fujitsu.com/jp/imagesgig5/fig_01_tcm102-5857076_tcm102-2750236-32.png

Winformsだと脳死でOwnerDraw使ってて、
かなり昔にWPFでVisualTreeでチャートのタスクを作ってみたら要素が多くなってきたときに
パフォーマンスがでなくてあきらめたことがある感じです。
適当に見つけてきたサンプルなんですが、これも図形を500個くらい出すと
(CPU9900Kで)ガクガクになってしまい
https://github.com/noitaro/wpf-excel-shape-line
2022/10/16(日) 09:43:21.72ID:H5a3DLoU
>>789
一部分しか表示しないなら仮想化してみる
大量のオブジェクトを同時に表示する必要がある場合は諦めてSkiaSharp等で独自に描画
791デフォルトの名無しさん
垢版 |
2022/10/16(日) 09:53:01.90ID:Lttjv/2U
>>790
なるほど。表示時間範囲を変えて多量に表示するケースがあるので独自描画ですかね。
こういう画面だとWPFになってもあんまりWinformsと変わらないんですね。
今もWinformsでSkiaSharpは使ったりしてるので。
2022/10/16(日) 09:59:25.00ID:5h4cgJ0F
DrawingVisual
793デフォルトの名無しさん
垢版 |
2022/10/16(日) 10:25:32.31ID:+WFeYHV0
>>789
リアルタイムで横スクロールさせる必要あり?
794デフォルトの名無しさん
垢版 |
2022/10/16(日) 11:26:13.18ID:Lttjv/2U
>>793
スクロールのリアルタイムが何を指すのかよく分かってないですが
画面に見えてる期間と、スクロール範囲の期間が指定できる感じです。

今はビットマップにお絵描きしてるんですが、期間が長いとメモリ量や描画速度の問題がでるので
見えてる範囲+1画面分先まで描画しておいて、スクロールはなめらかに表示できるようにして、
裏で次の1画面先の描画をしてます。
2022/10/16(日) 13:56:19.16ID:smb+KIWw
WinUIだとWin2Dが使えるね
796デフォルトの名無しさん
垢版 |
2022/10/16(日) 20:32:36.57ID:+WFeYHV0
>>789
単なる表示だけで良いなら、GDIなんかでJPGファイル生成して
それをwebviewコントロールで表示。スクロールもスムーズ。

リストビュー(詳細)にプログレスバー入れるのが面倒(難しい)ので
■を並べて疑似プログレスバーにしたり、そういうインチキは必要ですよ!。
2022/10/16(日) 20:40:32.26ID:g7emZOKP
WebView使うんならHTML canvasでいいだろ
クッソ速いぞ
798796
垢版 |
2022/10/17(月) 19:50:46.02ID:SW8Ac5Im
試しにWebBrowser コントロール でやってみた。
結構快適でした!
2022/10/17(月) 22:16:37.20ID:0qh/TO9I
Reactでやれば?
WPFより楽だよ
800デフォルトの名無しさん
垢版 |
2022/10/17(月) 23:28:17.22ID:McxJ9oCE
安いグラボでも取り付ければ解決しそう
801デフォルトの名無しさん
垢版 |
2022/10/19(水) 06:13:02.67ID:gHfHnf27
XAMLのgrid大変。XAML作ってくれるサイトないかな。
誰か作ってくれ!。
2022/10/19(水) 06:14:40.62ID:QJIH0uaq
それまたGreedyやな
803デフォルトの名無しさん
垢版 |
2022/10/19(水) 07:29:47.70ID:gHfHnf27
EXCELの罫線->HTML(TABLE)にしてくれるサイトはあるんだが。
804デフォルトの名無しさん
垢版 |
2022/10/19(水) 07:30:56.01ID:gHfHnf27
画面とプログラム分業できる! というけど結局はプログラムつくるやつが画面も
やる羽目になるんだよな。
805デフォルトの名無しさん
垢版 |
2022/10/19(水) 13:16:56.43ID:CSq9FDVE
そもそもそんな分業したくなるもんなの?
欲しいのは素材用意する人とかでしょ
2022/10/19(水) 14:09:50.67ID:8/1xE7ux
分業というか画面デザインとコードが別のファイルになるのが大きいのよ
もちろん一人でもできるけど二人以上が並行作業することによって納期が短くなる場合がある
2022/10/19(水) 15:25:04.63ID:xv0v1s7I
まぁ 確かにコーダーにはデザインセンスは無いわな。
デザイナーがやっているのを見るとさすがと思う事しばしば。
アイコン作りひとつとっても、ああいう統一感のあるプロの仕事は俺にはできない。
2022/10/19(水) 16:40:22.99ID:6Jytj3Zv
外観や視覚要素のことだけを指して「デザイン」と呼ぶ人が随分と増えてしまったな
2022/10/19(水) 16:42:36.62ID:hmhTQwmw
昔からなのに何を今更
810デフォルトの名無しさん
垢版 |
2022/10/19(水) 19:32:47.73ID:gHfHnf27
>>807
わかる。あれはセンスも必要だな。
811デフォルトの名無しさん
垢版 |
2022/10/19(水) 19:38:31.73ID:gHfHnf27
暇だったんでXAMLやってみた。gridが基本らしいのでテキトーにサイトから
コピペで張り付けて実験。一応何とかできるようになった。
開発の方に戻るかも知れないのでアンチWPFだったけど再挑戦してみようかなと、
思って。意外とWFPの仕事があるらしいな。
最初はデータバインディングで諦めたがwinforms風の作り方もできるらしいし。
(WPFはデータバインディングが必須だと勘違いしてた)

で、みんなはバリバリ、データバインディングしてんの? 凄いわ〜。
2022/10/19(水) 19:48:19.28ID:hmhTQwmw
逆にWPFのデータバインディングがわからないって知能を疑うレベルなんだが
何がわからないのかがさっぱりわからん
INotifyPropertyChangedを実装したオブジェクトをペタッと貼り付けるだけだろ

コマンドとデータバインディング縛りが面倒でどうしてそんなことしなきゃいけないのかわからんと言うならまだ理解できる
813デフォルトの名無しさん
垢版 |
2022/10/19(水) 19:51:24.12ID:CSq9FDVE
思い込みだけでアンチに走ってるやつたくさんいるよな
2022/10/19(水) 19:52:34.04ID:PkgPUfpm
面倒なだけだもんな
815デフォルトの名無しさん
垢版 |
2022/10/19(水) 19:54:17.30ID:gHfHnf27
>>812
プリズムというのを使わないとやってられん、
と聞いたけどどうなん?
2022/10/19(水) 19:59:29.50ID:hmhTQwmw
>>815
それは誰かの気のせい
Prismは無駄に複雑だからそれがわからないのはわからんでもない
CommunityToolkit使えばいい
817デフォルトの名無しさん
垢版 |
2022/10/19(水) 20:30:50.69ID:gHfHnf27
>>816
そうなんだ。
自力で習得したの?
周りに聞くとしたらここ位しかないわ〜。
2022/10/19(水) 21:11:06.79ID:fx6wlbL4
最初はなんかだめんどうだなこれとか思ってたけど
いつのまにやらバインドないとダメな体へ
2022/10/19(水) 22:52:15.49ID:MjHpqF4H
>>815
Prismはオワコン
2022/10/20(木) 08:31:41.48ID:Jn5DzN+i
Prism 懐かしい言葉。
PrismLibralyのぞいてみたら、更新止まっているようだね。
まぁ 他のエクステンションが充実して、もう不要だけれど、リージョンにはちょっと魅力あるな。
2022/10/20(木) 08:56:39.10ID:fA9BY5Dh
ReactivePropertyが流行ったのもPrismが重厚すぎるせいだったんだろうな
今全然使うことないや
そもそもView層にロジック置いてリアクティブスパゲッティとか茹でたらテストめっちゃめんどいし結局INotifyPropertyCanged作らなきゃメモリリークするし
2022/10/20(木) 09:06:41.37ID:Jn5DzN+i
>>821
まぁ 今や、View,Domain,Infrastructure分離の時代。
ViewやViewModelにロジック入れるとは思えないけどw
メモリリークは対策したんじゃなかったっけ? かずきが言っていたような・・・
2022/10/20(木) 09:14:02.00ID:fA9BY5Dh
>>822
> まぁ 今や、View,Domain,Infrastructure分離の時代。
いつの話をしてるんだw
それはMVVMとはまた別の話
というかもう少し原始的な話
2022/10/20(木) 09:17:17.47ID:Jn5DzN+i
>>823
分離していないのか?
2022/10/20(木) 09:17:56.01ID:Sw/y3Njc
DDDだろ?
話のレイヤーが違う
2022/10/20(木) 09:53:01.29ID:vhdcBzgB
>>822
ReactivePropertyはそれを入れるんだよ
まあ少々なら入ってもいいんだが調子に乗ってスパゲッティ茹でるやつ多すぎ問題が発生してな
2022/10/20(木) 11:46:42.17ID:1rcGbOTK
PrismでもBidableBaseを使う程度だとコレ以上ないシンプルな実装なので
遅くなるなんてあり得ないんだけどね
嘘だと言うならソースを見ればいい
評判悪かったのはDIの実装だが、DryIocを取り込んた後は悪くなかったんだがね
2022/10/20(木) 11:50:25.85ID:1rcGbOTK
BindableBaseのソース
https://github.com/PrismLibrary/Prism/blob/master/src/Prism.Core/Mvvm/BindableBase.cs
2022/10/20(木) 11:56:34.23ID:k5cX4DSs
DIって何だっけ?
シングルトンでええやんって奴か
2022/10/20(木) 12:32:08.36ID:EjoMYd4Y
BindableBaseだけならオレオレ実装で十分だから
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の話ね

最初の質問に関してはデータバインディング使いたくなきゃ使わなくてもいいが
その場合、自分でコントロールの中身を手動で更新
これがめんどくなければ使わなくてもいいんじゃないか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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