X



WPF(.NET4.x, .NET Core) GUIプログラミング Part23

■ このスレッドは過去ログ倉庫に格納されています
2019/05/16(木) 07:52:32.39ID:8fOYIMEO
Windows Presentation Frameworkについて語るスレ。

前スレ
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part22
https://mevius.5ch.net/test/read.cgi/tech/1513175747/

関連スレ
Windows 10 UWPアプリ開発 Part 2
http://mevius.2ch.net/test/read.cgi/tech/1499658092/

コードを貼る場合は以下のサイトの利用をお勧め。
run codeのチェックは外しておきましょう。
http://ideone.com/
2019/06/15(土) 10:13:25.41ID:Ga3aXpPN
>>191
Blectronは知らないがElectronの.NET版という意味ならまさにそうだな
ググったらもうすでに同じ発想で取り組んでるOSSユーザーが少なからず居たから
もう暫くしたらBlazorでクロスプラットフォームデスクトップアプリが実用化するんじゃないかな
2019/06/15(土) 10:33:45.61ID:p9QrGiGS
>>192
Blectlonでググったかい?
194デフォルトの名無しさん
垢版 |
2019/06/15(土) 15:17:17.19ID:xT5QU/B2
新卒で入った会社(5年前)がWinFormだったな。今も多分そう。
今はWindows用のコード書くことがなくなってしまったが、
あれはあれで生産性高いと思うわ。業務アプリだとデザイン性いらないし
2019/06/15(土) 15:30:24.49ID:RNWBuCRz
WPFも主ターゲットは業務向けだけど、日本のITドカタが業務システムと聞いてイメージするオーダーメイドなシステムとはだいぶ違う
米国では早くからシステムのパッケージ化が進んでいて、
パッケージベンダーにとっては一つ作れば多くの客に売れるから多くの開発リソースを投資してリッチなUIを作ることができる
そういう事情を踏まえて誕生したのがWPFなんだよ
日本でも近年は脱オーダーメイドが進みつつあるけど、既にリッチクライアントの時代が終わってSaaSになっちゃったからWPFの出番は来なかった
2019/06/15(土) 16:35:30.94ID:hWID9DJj
日本の業務アプリには御託並べるWPFプログラマは不要。
黙々と作業に徹するWinformコーダーが居ればよい。
2019/06/15(土) 17:08:33.15ID:RjknjEo7
業務にアクティブ要素、動的要素なんていらないからな。
コントロール全部並べてあって使えないところは無効化されてるだけでいい。
状況によって位置が変わるのをすげー嫌がる。操作ミスが増えるだけ。
198デフォルトの名無しさん
垢版 |
2019/06/16(日) 01:46:25.54ID:AXRRwyW/
バインドしてみたけど、まったくメリットが分からん...

http://marikooota.hatenablog.com/entry/2017/05/30/002059
とか、↓の方が簡単だと思う。

-- xsml --
<StackPanel>
<TextBox x:Name="tb1"/>
<Button Click="btn_Click">Count Up!</Button>
</StackPanel>

-- cs --
int count = 0;
private void btn_Click(object sender, RoutedEventArgs e)
{
count++;
tb1.Text = count.ToString();
}

誰か、バインドのメリットをアホな俺に教えて下さい...
199デフォルトの名無しさん
垢版 |
2019/06/16(日) 01:47:53.07ID:AXRRwyW/
>>198
空白文字消されるんですね; 読みにくくてすみません💦
2019/06/16(日) 03:49:25.26ID:3DdY3936
バインドの最大なデメリットは天才と無職しか使いこなせないこと。
2019/06/16(日) 09:03:33.98ID:muf2QdNo
>>198
あなたの作りたいツールがボタン押したら
カウントアップするだけの機能だけでよいなら理解する必要はない

でもたいていはそのテキストボックスには外部ファイルを読み取ったり、
データベースからデータをとってきて、集計したり加工した値が入るはずだ
その時にはbtn_clickのコードは肥大化して容易に1,000行を超える
その時には関数に切り分けたりすることを覚えるだろう
さらに進んでいくと、画面を凝ったデザインにしたくなったりユーザーの入力値を検証したくなったりする
そうすると画面のデザインを少し変えただけなのに
うまく動かなくなったりコンパイルエラーを起こすようになってきた
そこで画面は画面だけにしたほうが改修がしやすかったり、
デザインの得意な人にそれを任せることができるようになってくる
システムは機能や役割ごとに適切に分離していたほうが将来的にメリットがあり、
バインディングはそれを実現する仕組みの一つだ
2019/06/16(日) 10:07:34.99ID:X9An2SCt
三行で
2019/06/16(日) 10:11:25.65ID:X9An2SCt
バインディングは逆に手順が可視化されないのが弱点

よくわからないけど動いていればいいならバインディング
そこまでしっかり自分で制御したいなら通常のコードで
2019/06/16(日) 10:14:27.54ID:yX0oMZwq
手順の管理は量が増えると難しくなってスケールしないから
そもそも手順気にしなくていいように宣言的プログラミングしようぜってなったんだよ
ちっぽけなアプリ作るだけなら好きにすればいいさ
2019/06/16(日) 10:14:39.65ID:9Kn5GUQ/
ドヤ顔したいならバインディング
2019/06/16(日) 10:22:58.12ID:X9An2SCt
バインディングにも弱点がある
相互関係で値が決まるときにその相互関係を結局人間が追わなくてはならない場合が出てくる
その時に非常にバグが取りにくい
それでFBはMVVMを捨てた
2019/06/16(日) 10:24:41.66ID:X9An2SCt
スケールと言うけど小規模ならバインディングで対応可能だろうけど
それを超えるとまあ無理だろう
2019/06/16(日) 10:30:24.72ID:yX0oMZwq
手続き的だと非同期処理も非常に弱い
今の時代非同期が無いということはまずない
非同期処理ではやはり宣言的プログラミングが強い
手順すなわち処理の順番に依存すると非同期処理は急激に難しくなる
2019/06/16(日) 10:33:01.62ID:X9An2SCt
従来型はスケールしないと言うけど世間の大規模プロジェクトはほぼ100%
従来型(手続き型)で作られているだろう
手続きが書いてあればツールと人手を使えば解消のめどはつく
宣言的な組み合わせの場合はロジックをすべて脳に入れて考えなくてはならないので
大きくなればなるほど人間が追いつかないと思う

逆にバインディングで大規模プロジェクトが今現在も使われているとは思えない
2019/06/16(日) 10:34:56.59ID:X9An2SCt
人間が追い切れない場合は実行してデバッグしかないけど
それがまたバインディングの場合はやりにくい
2019/06/16(日) 10:36:05.79ID:yX0oMZwq
>>209
スケールしないのを金と人数に物を言わせて無理やり作った
それが従来型の大規模開発だな
スケールはしてないんだよ無理してるだけで

脳に入れなきゃいけないことが多いのは手続き的なほう
なぜなら手続==処理の順番に結果が依存するから
長い処理を扱うときに最初から最後まで手順を頭に入れてなければいけない
2019/06/16(日) 11:36:30.06ID:0yrhG5qH
画面単位で独立したロジックを記述してDBのみ共有する従来のスタイルなら余裕でスケールするよ
WPFは頭のいいアーキテクトがトップダウンでスマートな設計をするスタイルには適している
MSのプロダクトは基本そうやって作られている
一方、従来のバカでもスケールするスタイルで作ろうとするとWPFはフリーダムすぎて無茶苦茶になる
2019/06/16(日) 12:48:19.67ID:BOJP8Jll
そういうけどできてから10年以上立つけど
そんなに大規模のプロジェクトでWPFが使われてるような形跡がない
webでもMVVMは中規模から小規模向けで大きくなると使い物にならないという評価
2019/06/16(日) 12:56:44.07ID:35twkBI3
>>213
っVisual Studio
2019/06/16(日) 12:59:52.96ID:6qqET37p
大規模で使い物にならなくなるのは、学習できない月収14万円のコーダーばっか集めてるからやろ
2019/06/16(日) 13:00:12.87ID:Fx7TO0Mh
大規模な画面アプリなんてあんの?
普通サブシステム単位とかで実装別れると思うけど
2019/06/16(日) 13:32:34.96ID:yX0oMZwq
>>212
それは別の意味でスケールしない
DB処理にビジネスロジックが蔓延してメンテナンスコストが跳ね上がる
実行時パフォーマンスも悪い
2019/06/16(日) 14:00:08.42ID:uPzprWkd
>>216
サブシステムで数百画面とかのシステムもありますので…
2019/06/16(日) 14:11:05.99ID:UANb65jp
DBとはバインドするのは良くて、画面とのバインドは良くないという論調?
大規模な画面改修を想定しない限り、画面要素のバインドは良い事無いと思う。
作り変えるのが前提のプロトタイプならメリット有るだろうね。
レジに支払い方法追加するみたいに、旧来のロジックはそのままでレイアウトが変わるならバインディングも有効だろうね。
2019/06/16(日) 16:05:42.44ID:X8m3/+hI
>>219

one-way binding(射影)なら良いと思う。

個人的には当初MVVMの利点と言われていた「View(UI)のすげ替えが楽」なんてのは幻想で、
「自動テストが書きやすい(手動によるE2Eテストを減らせる)」というほうに重きをおくべきだと。
2019/06/16(日) 16:06:40.32ID:6qqET37p
>>220
確かにテストはめっちゃ楽だわ
2019/06/16(日) 17:08:33.07ID:X8m3/+hI
そう、だから自動テストという意味で >>198 を考えると、
btn_Click()イベント内部では"tb1"という他人のControlオブジェクトへ直接アクセスしている。
したがって"tbl1"Controlの存在無しに実行することができないから自動テストを書くのが困難になる。

これを、
・画面に表示されている値と常に一致しているカウント変数、という概念(=データバイディング)
・実際にカウントアップする処理(=ビジネスロジック)
・カウントアップするきっかけ(=イベント or コマンド)
に分けて考えることでビジネスロジックの自動テストを書くのが容易になる、というのがMVVMのメリット。
2019/06/16(日) 18:25:01.50ID:3DdY3936
>>212
WPF登場以降、MSのアプリ、ツールに一貫性がなく碌に使われずに開発が放棄され、
サポートしきれずオープンソース化される理由はそこにあるのですね。
2019/06/16(日) 19:37:59.62ID:G7NVDdhd
>>223
OSS化=サポートしきれない
じゃねーだろ…どんな思考してんだよ
2019/06/16(日) 20:16:09.10ID:wZzXbGgB
煽りたいだけだろ、スルーしとけ
2019/06/16(日) 20:45:27.52ID:3DdY3936
>>224
オープンソース化の経緯も知らずに何頓珍漢なこと言ってんだよ。

プレミアサポートが碌に質問に答えれなくなってる現実まで知らないとか、
MSと契約してないか、開発してないかのどちらか。
2019/06/16(日) 20:46:53.30ID:/vSSiNTa
つまりwinformsもサポート出来なくなったと
2019/06/16(日) 21:20:01.01ID:G7NVDdhd
>>225
ごめんキチガイに触ってしまった
2019/06/16(日) 21:24:45.01ID:C3V1csoe
>>226
Microsoftの中の人キタ━━━━(゚∀゚)━━━━!!
230デフォルトの名無しさん
垢版 |
2019/06/16(日) 21:30:04.16ID:GzHLSBJo
内容はともかく >>224の言い方も若干煽り入ってるし、ムキになる方もガキ
2019/06/16(日) 21:32:29.36ID:WJsnIQ8z
ガキ同士仲良くしてどうぞ
232デフォルトの名無しさん
垢版 |
2019/06/17(月) 01:08:20.00ID:kwIqiH/S
こんなオワコン老害スレにガキなどおらん。

いるのは無職とヨコからマウンティングするだけの糞じじぃのみ。
2019/06/17(月) 06:40:10.09ID:dkYFNC1r
>>232
おまえはどっち?
234デフォルトの名無しさん
垢版 |
2019/06/17(月) 12:15:35.07ID:IT0P3J54
WPFの使い勝手はともかく、使い手数に対して仕事はそれなりにあるんだからオワコンではないっしょ
2019/06/17(月) 19:39:32.64ID:fDhMMT3f
COBOL的論理
236デフォルトの名無しさん
垢版 |
2019/06/17(月) 21:35:53.79ID:Z9iR9gFd
60年現役のCOBOLさんを いつ消えるか分からんWPFなんぞと一緒にしないでくれたまえ笑
237デフォルトの名無しさん
垢版 |
2019/06/18(火) 06:15:24.31ID:3nOE2mBA
プログラム板にキチガイ降臨中!botに一晩も反応する異常さ
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
https://mevius.5ch.net/test/read.cgi/tech/1559872586/

142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。
238デフォルトの名無しさん
垢版 |
2019/06/18(火) 20:27:06.42ID:ei8mZ0vT
設計が糞すぎたから普及に失敗した。これがすべて。
2019/06/18(火) 20:44:01.17ID:PMWmWCmS
COBOLをボコる
240デフォルトの名無しさん
垢版 |
2019/06/18(火) 22:46:24.39ID:1c5MtUw2
XAMLのデザイン要素は悪くないと思うけど
MVVMとかに関しては労力に見合ったリターンがあるか疑問

個人的にはバインドとかいろんな書き方できるのがすごくイヤ。
バインドでもx:Name=でも良いんだが、Pjによって原則どっちかでしか書けなくしてほしい。
2019/06/19(水) 18:45:04.98ID:eIRWm2fN
>>240
それは規約の話じゃないか?
242デフォルトの名無しさん
垢版 |
2019/06/19(水) 20:02:02.54ID:Td37eomm
両方じゃない?
昔の言語でgotoでスパゲッティの成果物があったとして、書いたヤツや規約も悪いしgotoオッケーの言語も悪い。
2019/06/20(木) 19:00:34.81ID:OKnd5gHF
WPFで業務用アプリを作ってみたけどなかなかいいじゃない。
Material Design XAML Tool Kitのおかげでサクッと今風のUIが実現できて褒められたわ。
データバインディングしなかったからだと思うけどわりかし簡単に作れるし便利。
244デフォルトの名無しさん
垢版 |
2019/06/20(木) 22:52:20.47ID:HND361/m
バインドは自分で全部やるにはまだ良いのだけど、他人のバグを解析する時のめんどくささが半端ない。
2019/06/21(金) 21:27:48.13ID:n+3asy/J
そこでx:Bindですよ
2019/06/22(土) 00:12:48.90ID:fySNt3rb
COBOLにボコられるレベルか。否定はできない。
2019/06/22(土) 00:40:47.93ID:2eisPF//
exe作れるなら別にUWPでもいいんだけどな
2019/06/22(土) 01:00:34.07ID:65ybortV
イベントがバブルがどうとかちゃんと理解できてないまま廃れ始めてしまった
249デフォルトの名無しさん
垢版 |
2019/06/22(土) 11:40:15.33ID:rEuWV0gj
言語がはやるかに、入りやすさは大事だからな。
バインドでキレーに実装したのに、メンテした奴が手続き型でやってるとスゲーがっかり。
人材確保がむずいなら、最初から手続き型でやった方がいーわ
250デフォルトの名無しさん
垢版 |
2019/06/22(土) 11:53:14.62ID:rEuWV0gj
バインドのメリットとして分業しやすさが挙げられるけど、xaml と vmを別の作業者がやることなんてあんまり無いと思う。ほとんどのケースではコード量が増えてメンドイだけw
2019/06/22(土) 12:11:23.53ID:8ehMgppn
MVVMはクラスの数が増えるけど画面更新が楽なのがいい
ReactivePropertyと組み合わせるのが好き
2019/06/22(土) 12:40:42.40ID:5GxlA/I5
>>250
テストのしやすさやろ
2019/06/22(土) 12:52:59.27ID:Y4Y2JNgB
MVCのほうがテスト簡単でいいや
2019/06/22(土) 12:54:31.72ID:gdHFdK5j
テストせんやつにテストの楽さを説いても仕方ないやろ
2019/06/22(土) 12:58:17.43ID:Y4Y2JNgB
VMのテストをしてもE2Eテストをしなくていいわけじゃない
振る舞いが複雑化する傾向が強いMVVMはテストにおいてもデメリットが大きい
単純なMVCならE2Eテストも楽ちん
2019/06/22(土) 13:00:36.93ID:5GxlA/I5
>振る舞いが複雑化する傾向が強い
ソースよろ
2019/06/22(土) 13:03:08.40ID:Y4Y2JNgB
>>256
手元のWPFアプリソースでもみればいんじゃね?
2019/06/22(土) 13:10:11.63ID:gdHFdK5j
ジャ…どこかのSIerらはE2Eテストを人力でやるのが最良だとみなしてる節があるがな
2019/06/22(土) 13:16:43.11ID:Y4mhjvqt
>>258
それは正しいよ
一度きりのテストなら自動化はコストに見合わない
SIerなら納品後はどうせあまり弄らないし、仮にメンテが必要になったとしてもは都度工数を請求できるから無問題
2019/06/22(土) 13:23:15.77ID:opiN2/uR
なんと言っても数字でレイアウト出来るのが良い
マウスでポトペタは楽だけど美しくするには可也面倒だからね
2019/06/22(土) 13:24:06.96ID:1mmW7z7g
単純なMVCアプリしか作ったことない人:「MVVMは複雑だからテストが大変」

こういうこと?
2019/06/22(土) 13:28:47.48ID:5GxlA/I5
>>261
たぶんそういうこと
ただの妄想やで
2019/06/22(土) 14:23:52.15ID:Y4mhjvqt
>>262
事実やで
というか論理が逆で、そもそも複雑だからMVVMを使うんだよ
だから典型的なWebMVCに比べてテストが大変なのは当たり前
264デフォルトの名無しさん
垢版 |
2019/06/22(土) 14:42:56.00ID:rEuWV0gj
MVVMのテストは楽だと思う。
コーディング・テスト・バグ修正の合計時間で考えると得してるかは疑問だけど。
2019/06/22(土) 15:50:17.05ID:5GxlA/I5
>>263
事実ならソースよろ
2019/06/22(土) 15:56:59.09ID:1mmW7z7g
>というか論理が逆で、そもそも複雑だからMVVMを使うんだよ

なら原因はMVVMであることではなくてその前に複雑であることになるが、
自分が何を言っているか理解しているんだろうか。
2019/06/22(土) 15:59:36.88ID:x9ZPs6AR
>>256
>>265
バカじゃねぇの
2019/06/22(土) 16:00:33.66ID:Y4mhjvqt
>>266
だからそう言ってる
UIの要件が複雑だからWPFを採用し、WPFが複雑だからMVVMを採用する
2019/06/22(土) 16:07:07.54ID:5GxlA/I5
>>267
妄想なら誰にでもできるもんね
270デフォルトの名無しさん
垢版 |
2019/06/22(土) 16:37:06.55ID:rEuWV0gj
少なくともUIに関しては複雑だからより、見た目的な理由でWPFだと個人的には思ってるw
271デフォルトの名無しさん
垢版 |
2019/06/22(土) 16:39:59.61ID:ykSXq++N
>>267 >>269
中身なしで罵倒し合うのって、ガキの喧嘩過ぎて見苦しい
2019/06/22(土) 16:41:04.54ID:5GxlA/I5
>>271
罵倒はしてないよ
ソース見てみたいなーって話
2019/06/22(土) 17:00:01.32ID:x9ZPs6AR
>>272
バカじゃねぇの
2019/06/22(土) 17:13:14.38ID:5GxlA/I5
>>271
罵倒って>>273みたいなやつのことっしょ
2019/06/22(土) 17:37:26.58ID:czMayCJt
wpfよりこのスレの方が複雑で草
2019/06/22(土) 23:36:27.74ID:33sn5taJ
うまいオチだ
2019/06/23(日) 00:17:08.67ID:x4qCzVIO
上でテストの話が出てるけど

エンジニアたち「できたっぽい!」
上司「テストして」
エンジニアたち「一通り動いてます!」
上司「エージングもたのむ」
エンジニアたち「丸一日動かしっぱなしでもOKでした!」
上司「了解」

という雑な開発しかしたことない自分にはついていけない…
278デフォルトの名無しさん
垢版 |
2019/06/23(日) 00:50:10.75ID:+hNeL9sR
むしろ簡単なPJの方が世の中多いし、自動テスト作らなかったら困ったであろうことは5年やってて一度しかないw
2019/06/23(日) 06:37:29.75ID:0ZLQVu14
俺は自動テストは一部のモジュールの単体テストでしか使わんなぁ
プロジェクト単位で導入するんじゃなくて、個人で導入するものかと
2019/06/23(日) 07:42:47.22ID:P8H0jYp7
自動テスト無いと困るよ
エクセルスクショは精神を病んでしまう
病んだら困る
281デフォルトの名無しさん
垢版 |
2019/06/23(日) 09:04:47.66ID:ATNbze7o
SIerは縦横に広がるテスト書に満足する顧客が多いからな〜
金持ってる大手ほどその傾向が強い(笑
2019/06/23(日) 10:23:02.87ID:Mn96V+f7
大概自動テストのシナリオ書いてる手間で打鍵した方が早かったな
シナリオが使い回せるならまた違うだろうけど
2019/06/23(日) 10:29:23.44ID:x+1RTwK/
大手だとテストシナリオ書いてる人と実際にコード書いてる人は別

SEが馬鹿みたいに多くいて何か月もずっとテスト仕様書を書いてる
2019/06/23(日) 10:54:16.26ID:P8H0jYp7
エクセルよりコードのほうがシナリオ書きやすい
コードでシナリオ書いたら実行工数は0
1回しかテストしない場合でもコードで書いたほうがいい
2019/06/23(日) 12:21:50.63ID:7s8J8D/4
>>283
タウンワークで時給1600円のテスト要員募集してたな。
「コードは書きません、短期長期どちらも可。」みたいな
2019/06/24(月) 01:03:52.09ID:Y9x0dRru
Prism 7.1 のチュートリアルサイトないっすかね
妖精作戦さんのところは読み物としてはとても良いけどソースはGitHubな!なスタンスなので使いにくい…
公式のチュートリアルは WPF (Legacy) で 6 版のままだし
モヤモヤしながら勉強中
2019/06/28(金) 17:52:56.52ID:lioMzEvp
NVVMでは~.xaml.csには何も書かないのが理想とのことですが、例えば他のwindowを開くような処理はビューモデルに記述するのでしょうか?
根本的な疑問は、~.xaml.csに何も書かないということはモデルでできることが何もなくなり、その代わりモデルに記述するのでべきことを全てビューモデルに記述することになってしまっておかしいのでは?ということです。
私が何か勘違いしてるのは間違いなさそうなのですがそれがわかりません。。
2019/06/28(金) 18:18:14.10ID:iRyUn2/n
.xaml.cs
に書くのはMODELではなくVIEWMODELでは?
2019/06/28(金) 18:38:47.09ID:8le9HcFr
>>288
Viewでしょ
2019/06/28(金) 18:43:28.81ID:IeC+ybxD
>>287
あくまで自分の場合だけれど、
画面を開くとかメッセージ出すとかはそれ専用のサービスクラスを作ってる
そしてviewmodelからそのサービスを呼び出すようにしている

viewはicommandを介してviewmodelに通知するだけで、
その後どのサービスを呼び出すかはviewmodel、
実際の処理はサービスクラスに書かれている
コードビハインドに書いた方が圧倒的にシンプルになる場合はコードビハインドに書く
2019/06/28(金) 20:11:16.63ID:1dGBh4nf
VSMでストーリーボード動かすよりイベントハンドラから動かしたほうが圧倒的に楽なんだよな
その場合はコードビハインドに書くしか無いが
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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