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

■ このスレッドは過去ログ倉庫に格納されています
2023/01/22(日) 05:53:16.97ID:oY263ilm
WPF(Windows Presentation Foundation)について語るスレ。

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

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

コードを貼る場合は以下のサイトの利用をお勧め。
https://ideone.com/
2023/08/19(土) 01:56:58.32ID:1/hroNhs
WPFのスレでWPFアプリを作って公開したらWinFormsでやれと怒られる。
理不尽すぎる
2023/08/19(土) 02:11:07.74ID:C10c8hLy
>>791
何言語?
2023/08/19(土) 08:33:41.11ID:wdqaA6jW
効いてて草
2023/08/19(土) 08:57:39.75ID:+QDwvDWv
作りたいなら手を付ければいいのにな

モックなりプロトタイプなり、人によっては基本設計なりスケッチなり、
やりたいアイデアがあるなら端からやってみればいい
2023/08/19(土) 10:14:20.56ID:xxLsZdb0
>>775
フォントってモニターの解像度が高いと綺麗に見えるんだよ
そんなことも知らずにフォント叫んでるのお前だけだからな
2023/08/19(土) 11:39:14.41ID:Wl/qjPve
そういや、DATアクセスは8月まではフリーアクセスどうこう言ってるけど
運営は8月移行はどうなるかわからんとか言ったん?
2023/08/19(土) 14:14:58.58ID:Wl/qjPve
うんこWinUI 3の最新版リリースされたやん
Version 1.4 Preview 2
次がStableか
つかさ、新しいItemsViewコントロールとか
最初
ListView/GridView

ItemsRepeater

ItemsView
2023/08/19(土) 14:19:30.21ID:Wl/qjPve
The new ItemsView control displays a data collection. ItemsView is similar to the ListView and GridView controls, but is built using the ItemsRepeater, ScrollView, ItemContainer and ItemCollectionTransitionProvider components. It offers the unique ability to plug in custom Layout or ItemCollectionTransitionProvider implementations
なんだItemsViewはItemsRepeaterなどの合体コントロールか

で新しいレイアウトのLinedFlowLayoutと
AnnotatedScrollBarか
2023/08/19(土) 14:33:48.82ID:Wl/qjPve
ItemsRepeaterの問題は選択機能がなく、自前で実装(見た目とかも)しなきゃいけなく
億劫だったが
ItemsViewはそこら辺もListView/GridView見たくやってくれるようなったんだよね?
2023/08/20(日) 20:28:42.15ID:N/OxtUO+
ちゃんと手を動かして形にしてるだけ偉いと思うんだ
夏休みダラダラしてた俺とは天と地ほど差がある
2023/08/20(日) 20:43:28.47ID:yJmfO0+S
今はさすがに休もうよ
秋はコーディングの季節だ!
2023/08/20(日) 21:50:19.57ID:m38bh0Ky
近頃は秋なんかほとんどないけどね。
2023/08/21(月) 10:28:12.08ID:ol1P3YlW
>>779
UI/UXは技術じゃなくセンスだけども、頑張って欲しい
テーマを選べるだけでもいいかもしれないが
あとやっぱり機能として、スレ立ては欲しいな
2023/08/22(火) 22:27:09.72ID:gdIlDAxT
Vmという接頭辞がついているのにviewmodelじゃなかったり、過去の使われなくなったコードが全部残ってたり、1クラスが1万行超えてたりetcetc
おまけにそもそも設計のドキュメントは一切無い。外部向けの資料のみ。ひどい会社に来てしまった……
806デフォルトの名無しさん
垢版 |
2023/08/22(火) 23:11:38.63ID:6gJfdiDb
JTCあるある
2023/08/23(水) 00:06:39.19ID:nS+GPZ+c
>>805
そういう愚痴はマ板でやれ
だからお前は駄目なんだよ
2023/08/24(木) 01:54:01.54ID:9YaJu4I5
>>751
datのフリーアクセスって8月いっぱいなの?
2023/08/24(木) 20:49:59.75ID:FZQDzoDX
>>804
スレ立てテストできる板ってどこかにありますか?
2023/08/24(木) 20:56:22.03ID:U1/Wc6cv
>>809
Anarchy実況
https://agree.5ch.net/liveanarchy/

数分で消えるしdatも残らず消滅するから気楽にテストできる
2023/08/24(木) 21:07:04.44ID:FZQDzoDX
>>810
ありがとうございます。機能追加してみます
2023/08/24(木) 22:13:47.33ID:Tz9EhHoC
がんばれ!
2023/08/24(木) 23:13:10.10ID:ypVJRmCU
>>811
あのコードは何人で書いたんだ?
2023/08/24(木) 23:34:26.49ID:Ax2+ubkj
どう見ても一人だろ
2023/08/26(土) 11:36:32.15ID:UpJ7Bk8S
初心者じゃないんだから、5chブラウザつくるとしても
少し挑戦的な事してここの視聴者楽しませてよ
2023/08/26(土) 12:52:15.75ID:d6TpiO9T
ツマンネ。もっと気の利いたこと書き込めよ
2023/08/26(土) 14:29:43.74ID:QKHGYPpz
コード見るとわかるけど違和感しか感じない
C++?とか
2023/08/26(土) 14:37:18.36ID:QKHGYPpz
ともかくいろいろとちぐはぐしてる
人に見られることを前提とした普通に自分で組むには不要なコメントとか
大きなサービスとか…
2023/08/26(土) 15:09:41.41ID:hcnbZQTk
なんだそのふわっとした具体性のない指摘は
無理にケチ付けることないのに
2023/08/26(土) 15:24:12.70ID:QKHGYPpz
コードを見ればわかるよ
2023/08/26(土) 15:35:06.57ID:QKHGYPpz
もともとc++などを含めた他の言語で野良コードを書いてた人が
ビジネス向けの専門学校みたいなところでC#を学んでDIとか色々知識があるような印象

そして丁寧にコードを書いてるけどまだC#が血肉にはなってないので元の癖が出る
それか仲間の先生に当たる人が乱雑だったので変な癖が残っているか

誰か別の人間がところどころコードを書いたのかコピペしたのか
2023/08/26(土) 15:44:44.01ID:FILnRN1t
本当に具体性のない空っぽな指摘だな
こういうのが上司につくと辛い
2023/08/26(土) 17:09:36.31ID:UpJ7Bk8S
https://devblogs.microsoft.com/ifdef-windows/windows-community-toolkit-8-0-pre-release/
2023/08/26(土) 17:15:40.72ID:lyifkqna
>>822
上司じゃなくてもキツイだろ
関わりたくねーわ
2023/08/26(土) 17:15:42.20ID:QKHGYPpz
>>822
いやいや指摘でもなんでもない
違和感を書いてる
そして何も気が付かないにぶーい人に自分の見解を伝えてる
2023/08/26(土) 17:28:24.81ID:QKHGYPpz
このスレの他の人はオリジナリティの話をしてる
昔からあるドラマや漫画で出てくるような芸術作品や演奏に対する指摘のようなもので

君の作品には情熱が感じられない教科書通りでつまらないみたいな話
いまだとばらかもんが丁度似た様な話をしてる

自分は今現在はそこまでの話をする段階にないと思う
適当なところで切り上げて色々デザインして経験してみたほうがいい気がする
その後に作ったものが自分が楽しんで使ってることに喜びを感じるレベルになれば人からもそういった面で良い評価を貰えると思う
2023/08/26(土) 17:41:00.84ID:UpJ7Bk8S
せっかくアプリ作って公開しましたと面白そうなネタが投下されたが
だめそうだな
2023/08/26(土) 17:56:06.42ID:hcnbZQTk
それっぽいこと言って偉そうにしたいだけか
どうりで中身が皆無なわけだ
2023/08/26(土) 18:25:05.72ID:W2Um6gjp
アクロバティックなものを所望ならBlazor Hybridもいいと思うのよ
実用性あるかは別の問題として、前例のないことをやるという点は満たしてる
2023/08/26(土) 22:00:12.76ID:16WUCkmH
書き方なんてどうでも良いのよ?
ゲイツはみんなと違う画期的なコードで時代を切り開いた。
2023/08/27(日) 00:46:17.43ID:W3b+7qIa
>>825
では俺も ID:QKHGYPpz のレスを見て指摘でなく違和感を書こうかな
誰の何の役にも立たない独り言なら、多数が集う掲示板でなくチラシの裏にでも書いて誰にも見せず捨てればいいのに
会話できず、するつもりもないと開き直るなら掲示板にくるのは無駄だし害悪ですらある
これに気が付かないにぶーいID:QKHGYPpzに自分の見解を伝えてみた
2023/08/27(日) 09:09:39.66ID:4wYaVVdN
お前の方こそブーメラン刺さってねw
2023/08/27(日) 11:36:52.09ID:3H5CXIUM
>>830
どんなの?
2023/08/27(日) 12:46:27.21ID:W3b+7qIa
>>832
そのとおりだよ。わざと >>825 を真似て醜悪な文面にしたのだから
>>831 のレスは ID:QKHGYPpz の鏡だよ
2023/08/27(日) 12:58:47.33ID:t0g5o5TS
そんなこともわからない>>832の頭の悪さときたら
ってことでしょ
2023/08/27(日) 13:51:55.91ID:vknuNgDk
viewmodelsって対応するviewに表示するためのデータとロジックを持ってるって認識で合ってる?
コード見てると他のviewmodelファイルでインスタンス化されたりプロパティが呼び出されてたりしててあれこういうのありなの?って
2023/08/27(日) 14:43:13.39ID:Qf4ZUzrP
例えばどのファイルのどこがおかしい、改善すべきと言わないと
2023/08/27(日) 21:19:33.66ID:vknuNgDk
機能修正の事前準備としてリファクタリングさせてください
とか言ってもひとまず機能修正優先でとか動いてるんだから余計なことするなとか言われるのがオチだよね
2023/08/27(日) 21:40:22.11ID:IUQW/AR/
もうその5chブラウザの事ほっとけよ
作者があまり顔出さないのに
作者不在のままここで毎回ゴタゴタが発生であほらしい

ほっとくのが吉
2023/08/28(月) 19:25:42.52ID:Ed5E1clR
心理的安全性の低いスレだな
2023/08/28(月) 19:58:34.85ID:BueC5+dS
攻撃しても何もいいことはないのになあ…
googleの本でも読めば良いのに
2023/08/28(月) 20:00:38.72ID:BueC5+dS
ふと思ったことや感じたことを言うと叩かれる → 心理的安全性が低い
他人の行ったことを否定する → 心理的安全性が低い

本人に自覚がないのが恐ろしい
2023/08/28(月) 20:44:27.43ID:QJ/DbKdl
マスゴミって批判しないで、記者が萎縮してしまいます。でも自分達は批判も攻撃もするけどね。みたいな二重基準?
2023/08/28(月) 21:29:09.23ID:6uHv/wqC
技術的な話とかに関して色々批判はいいと思うけど
最後は人格攻撃と不毛な事になるのが多いからなw
2023/08/30(水) 09:16:29.73ID:rmxbhQ8d
MVVMって例えばWPFでいうなら、VMでSystem.Windows名前空間をusingしないっていう認識で合ってる?
要はVMだけでOS非依存のdll化できるか
2023/08/30(水) 10:42:16.63ID:mm/q7vOw
そんな定義は聞いたことないな
2023/08/30(水) 11:12:09.35ID:FKrsdOsE
究極の疎結合って意味では合ってる
CommunityToolkit.mvvmもプラットフォーム非依存だし極端な話、上側がWinUI3でもVMそのまま動くってことでしょ

ただ実際問題すげーめんどくさいとは思うがw
2023/08/30(水) 13:38:27.33ID:Zjd+Qgp2
だね、5chブラウザのほうでViewModelでウィンドウクラス?を参照してたのは気になってた

まぁ、最初の1回だけは勉強のためMVVMガチガチにやって頑張ってもいいし
そこは本人次第
2023/08/30(水) 14:56:17.68ID:rmxbhQ8d
ありがとう、System.Windowsを分離してみる。


>>848
確かにWindowは分かりやすく「ん?」ってなるけど、
ClipBoardとかBitmapImageとかもみんなSystem.Windows配下なんだよね。
これらの処理を全部持ってくと、Viewにも結構ロジックが必要になりそう。
UIフレームワーク固有の機能なんだから疑問を持つのがおかしいのかもだけど
2023/08/30(水) 23:23:43.59ID:I012WzjW
View固有の機能じゃなければ分離しなくてもよい
2023/08/31(木) 00:04:15.85ID:tqam1yBh
その前にenumの機能のおさらいをしたほうが良い
2023/08/31(木) 01:17:12.25ID:UxD03clT
MVVMといえばうちの会社でのプロジェクトでさぁ例えばだけどmodelにcircleクラスがあるとするじゃん
んでそれをコンストラクタの引数に取るVmCircleなるクラスをわざわざ作るのよ。んでそれを各種viewmodel内部でいじるんだけど、VmCircleはCircleのviewmodelとか言ってるの
おかしいでしょそれはviewmodelでもなんでもないでしょって言ったんだけどいやviewmodelだって
これ俺がおかしいのか?
2023/08/31(木) 01:44:14.25ID:k/7LWfvb
>>852
サーバサイドでも使う Entity とかを .NET Standard で共有して、
クライアントサイドではそれをINotifyPropertyChanged を実装したクラス (VM) に変換する必要がある、
もしくは将来的に変更通知が必要になる可能性を見越してそうしておく、
とかならありえなくはないんじゃない?
854デフォルトの名無しさん
垢版 |
2023/08/31(木) 07:06:57.56ID:BoGIe8nI
>>845
変な理解しているな。
ViewModelでBitmap加工などは普通にやる。 当然、System.Windowsをusingする。
Viewのエレメントに直接アクセスするなという事だけ。 いわゆる委譲だな。
例えば、Viewにパラメーター渡すために、IxxxViewRepositoryインターフェースをViewに継承させ、そのレポジトリをViewModelにインジェクションすればそれでOK。
ContainerのChildrenは、ViewModelにダイナミック生成バインドできないので、Add、Remove、Move操作をそういう方法でやる。
DDDなどのクリーンアーキにチャレンジしてみれば、その辺はインチュイティブに理解できるようになるよ。
2023/08/31(木) 07:56:35.25ID:UxD03clT
>>853
そもそもviewmodelってviewとmodelをつなぐ役割をするものじゃないんですかね
別に対応するviewなんて何も無いただデータとそのメソッドを持つだけのクラスをviewmodelと言えるんでしょうか
2023/08/31(木) 11:36:17.81ID:GMvg4a1K
https://learn.microsoft.com/en-us/windows/apps/windows-app-sdk/stable-channel#version-14

うんこ品質の時間です
突然1.4がリリースされやがった
9月末が予定じゃなかった?
2023/08/31(木) 12:07:44.06ID:+9swg57/
>>854
それ、すごい労力かかる割にはWPF専用のViewModelになっちゃうじゃない。
いまUIライブラリ移行の過渡期なんだし、再利用できるViewModelとか考えないの?
2023/08/31(木) 12:40:08.29ID:k/7LWfvb
>>855
俺の理解が間違ってるかもしれないけど、
その Circle クラス?が画面上の円のコントロールかなにかの DataContext になってるなら ViewModel であるといえるんじゃないだろか。
画面上のどこにもバインドしてないんなら違うと思うけど。

例えば ListBox の ItemsSource にバインドするコレクションの各要素の型は ViewModel と言えると思う。
ListBoxItem を 1つの View として見た時にその DataContext になるから。

↓これとか ItemViewModel というのを定義してる。
https://blog.okazuki.jp/entry/2016/04/08/233620
ItemViewModel
2023/08/31(木) 13:22:03.44ID:WwAx/vtc
viewmodelはmodel用のviewじゃなくてview用のmodel
各種viewmodelでcircleモデルのview用の変換やviewからの入力に対してモデルとの橋渡しをする場所としてvmcircleを作ってるんならまあ理解できる
2023/08/31(木) 14:00:23.53ID:+wESSzqb
何なら納得するんだろうか?

画面に複数のタブページがあるアプリがあって
メインVMに複数のタブページ用のVMがリストなどで持たれている(直接のモデルじゃなくて)

これでおかしいと思うのかどうか
2023/08/31(木) 15:36:13.08ID:KSwuKB63
XAML Islandsとか名前がよくない
絶海の孤島のイメージだ
2023/08/31(木) 15:53:03.73ID:A6umWt5F
Islandsで孤島?
2023/08/31(木) 16:07:40.97ID:qE8kvwKZ
複数形だから孤島ではないな
864デフォルトの名無しさん
垢版 |
2023/08/31(木) 16:52:36.04ID:BoGIe8nI
>>857
VieModelの再利用?
再利用するのはViewの方であって、ViewがViewModelへのバイディング権がある。
それで、フレキシブルな画面構築ができる。
ロジックの再利用は、Domain層にまとめる。
2023/08/31(木) 17:36:52.11ID:+9swg57/
>>864
ん?例えばMAUIとかWASMに移植するときはViewModelを全部作り直すってこと?
大変じゃね?っていうかそれってMVVMじゃなくね?

MVVMって画面とロジックの分離であって、画面が変わるたびに作り直さなくちゃいけないなら
それはViewModelではなくViewの範疇では?
2023/08/31(木) 18:44:34.81ID:+wESSzqb
ViewModelはviewとmodelの間が互いにデコボコしてて
綺麗にくっつかない場合に間に入るつめもの

もともときれいにくっつくなら不要

Viewが変わればまた形に添ったViewModelが必要になる
2023/08/31(木) 19:17:40.59ID:0zAKJthF
クライアント側にあるView層にViewとViewModelがある
サーバー側にModel層があって自分の場合はREST full APIで作られたSaaS出ある場合が殆ど
業務ロジックはModel層内に全てあるので再利用可能
2023/08/31(木) 19:22:25.33ID:0zAKJthF
View層にはWPFを動作させるための処理しかない

View層をReactで作ってもそこにあるのはReactを動作させるための処理しかない

業務ロジックは全てサーバー側にあって全く無駄にはならない
2023/08/31(木) 21:51:01.50ID:lnQo2el+
>>762
今思いついたんだが「sugar dragonfly」はどう?
2023/09/01(金) 16:45:19.11ID:ba1FgNHl
機器の通信サンプルアプリをWPFで作るのは有り?
サンプルを参考にする相手がWPFを使ってるかわからないから、WinFormsの方が無難かな?
一番無難なCUI版は出来たからコアの通信部分は変わらなくて、通信結果を見やすくするだけなんだけども
2023/09/01(金) 17:16:03.23ID:E0s4hvcN
ActiveXでExcel VBA対応するのが無難だな
2023/09/01(金) 19:47:27.67ID:+613Qa0i
>>866
それはVMじゃない。どっちかというとMVCのCに近い。
2023/09/01(金) 21:56:19.74ID:42muqi3u
>>866の説明はCよりVMよりだと思う
VMはModelを特定のView用に変換した状態を持っておくもの

MVC
Vーーーーーーーー 監視 ーーーーーーー>M
Vーーー入力ーー> C  ーーー入力ーー>M
V<ーーーーーーー 通知 ーーーーーーーーM

MVVM
Vーーー監視ーー> VM ーーー監視ーー>M
Vーーー入力ーー> VM ーーー入力ーー>M
V<ーー通知ーーー VM <ーー通知ーーーM
2023/09/01(金) 22:06:47.51ID:XOi5r4E6
みんなめちゃくちゃだな..
2023/09/01(金) 22:16:55.21ID:+613Qa0i
>VMはModelを特定のView用に変換した状態を持っておくもの

なにその珍解釈
2023/09/01(金) 22:33:11.78ID:dq5C6mfu
一人だけ俺様理論がおるな
2023/09/01(金) 22:55:04.64ID:86UzGWyS
みんなVIEWを差し替え差し替えでMODELを流用することやってるの?
2023/09/01(金) 23:31:31.63ID:hl1Bipr4
いや全然
2023/09/02(土) 00:18:16.99ID:fOS98KnE
自己満ですなーー
WPFのMVVMがまさに究極の自己満

MVVMとかvue.jsとかangular、androidとかでも普通に使うし
そっちは実装コストもかからん
2023/09/02(土) 05:21:08.01ID:6VujaKd3
android studioはwindows formのポトベタと同じ感覚なんだが?
881デフォルトの名無しさん
垢版 |
2023/09/02(土) 08:18:23.73ID:Fau+Wvgs
>>877
モニターアプリでは良くやるよ。
化学プラントの製品毎の画面やライン管理の製品毎の32~4096接点モニターとかね。
モニターと非常停止等の共通アクション画面なら流用する。
ただし、Viewのビハンイドコードトリミングは必要。
それらを再利用というには微妙だな。 VMはペアで消費するものと考えるのが普通。
再利用というのはロジックの再利用を言うのが一般的じゃね?
2023/09/02(土) 09:33:36.47ID:fwdoqn2z
結局VMに何らかの描画以外のロジックを書いてる人が多いんだろうなと
mvvm原理主義者じゃなければ別に好きなようにしたらいいんだが

WPFは結局どのように実装すべきなのかハッキリとしたパターンが確立されなかった
これが一番の問題だった

明確に役割分担してオブジェクトの生死を適切に管理してる人間がどれだけいるのか
2023/09/02(土) 09:49:03.02ID:fOS98KnE
>>875
あってるぞ
MをVに表示させる為に必要な形に変えたものだ
例えばM(Web APIのResult)をVM(Vにバインディンク可能なデータ型)に変換してVと接続する
2023/09/02(土) 10:06:25.37ID:fwdoqn2z
状態と言う意味が通じていないので話をしても無駄

v vm mでそれぞれ状態は持ってる
普通はmの状態のことを話すんだけど双方の話がかみ合っていない
2023/09/02(土) 10:12:13.25ID:fwdoqn2z
本来はMと全層から利用されるビジネスロジックが主体なんだけど
vmでガッツリロジックなり制御なりのコード書いてる人が多い

そういう人から見るとvmは状態を持っていると言う主張になる
886デフォルトの名無しさん
垢版 |
2023/09/02(土) 10:21:43.71ID:Fau+Wvgs
>>882
だね。
ViewModelはインスタンスプールの場という認識が無いとそうなるね。
Bitmap加工にしても、ロジックは別の層に置くもの。
ロジックはDomain層、ドライバーはInfrastructure層でカキコしておけば再利用というスタイルの本筋が見えてくる。
2023/09/02(土) 10:42:05.01ID:ePvjWEyO
wikipediaだとこうだな。VMはVが表示すべき状態を保持するというのが普通の理解だと思う。

ViewModel
ViewModel(ビューモデル)はViewを描画するための状態の保持と、Viewから受け取った入力を適切な形に変換してModelに
伝達する役目を持つ。すなわちViewとModelの間の情報の伝達と、Viewのための状態保持のみを役割とする要素である。
2023/09/02(土) 10:53:39.97ID:UWvP69T4
という事はバリデーションもvmじゃなくてmでやるの?
2023/09/02(土) 11:59:17.23ID:+7egXD0v
>>887 の定義だとちょっと密に思えてしまうな


https://learn.microsoft.com/ja-jp/dotnet/architecture/maui/mvvm

大まかに言うと、ビューはビュー モデルを "認識" し、
ビュー モデルはモデルを "認識" しますが、
モデルはビュー モデルを認識しておらず、
ビュー モデルはビューを認識していません。
したがって、ビュー モデルではビューをモデルから分離させ、
ビューとは独立してモデルを進化させることができます。
2023/09/02(土) 12:40:51.82ID:CPf5VJuY
君たち一旦モデルの事はわすれろよ
めちゃくちゃすぎる
2023/09/02(土) 13:16:00.96ID:CPf5VJuY
>>882の言うようにハッキリとしたものがないと同意した上で言わせてもらうが
>そういう人から見るとvmは状態を持っていると言う主張になる
VMは状態をもつ

めちゃくちゃすぎる
普通に状態を持つ
2023/09/02(土) 13:18:09.94ID:fwdoqn2z
アプリケーションの真の実態はMなんだから忘れることじゃないな
勘違いされがちだけどMはデータ置き場でもライブラリでもないアプリケーション本体

VMは表層でしかない
メッセージの仲介所
上で書かれたインスタンスプールでもない
仕事をするにあたりただどこかにあるモデルへの参照を持っているだけ

ModelAとModelBを参照して計算してModelCに入れるのはVMの仕事ではない
VMはMに単純なメッセージ飛ばすのが仕事
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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