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

レス数が950を超えています。1000を超えると書き込みができなくなります。
2021/06/20(日) 17:04:18.66ID:7UVkl7BZ
Windows Presentation Frameworkについて語るスレ。

前スレ
WPF(.NET4.x, .NET Core) GUIプログラミング Part25
https://mevius.5ch.net/test/read.cgi/tech/1612522463

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

コードを貼る場合は以下のサイトの利用をお勧め。
run codeのチェックは外しておきましょう。
http://ideone.com/
2021/09/15(水) 15:57:04.37ID:a6LjJ0wO
やったこと無いけどFormsでもデータバインディングできるんじゃ?
2021/09/15(水) 16:02:38.01ID:FpSMo0oE
>>890
Forms+ReactivePropertyで双方向バインディングやってるけど
2021/09/15(水) 17:02:45.49ID:3TKYe9Fz
>>890
お前の言うMVVMの定義を教えてくれ
2021/09/15(水) 17:05:49.55ID:QKlVFcsu
業界アキーテクチャ的には
双方向バインディングはバッドパターンだ
糞認定済み
2021/09/15(水) 17:09:11.47ID:QKlVFcsu
react等の先端frameworkに比べると
思想的にかなり見劣りする
2021/09/15(水) 17:28:11.46ID:wmRmGPP4
次はMVUだったっけ?
897デフォルトの名無しさん
垢版 |
2021/09/15(水) 18:32:29.56ID:IqGZburM
実行ファイル(.exe)が出力できて将来性のある
プラットフォームってやっぱりWPFしかないのかな?
2021/09/15(水) 18:36:43.11ID:R2NlFkLx
将来性はないです
2021/09/15(水) 18:36:44.91ID:jnuePZVr
最先端はなんだろうAvaroniaとか?
SilverlightもWindows Phoneも、昔はいろいろあったよね
2021/09/15(水) 18:47:44.45ID:EcTTP5JU
>>897
WPFやるぐらいなら今後はWinUI3じゃ?
901デフォルトの名無しさん
垢版 |
2021/09/15(水) 19:00:42.07ID:IqGZburM
WPFに将来性はあまりないのか

>>900
ありがとう。ちょっと調べてみる
902デフォルトの名無しさん
垢版 |
2021/09/15(水) 20:53:25.10ID:bT20IgU4
>>885
日本語勉強するのはあんただよ

>
2021/09/15(水) 21:01:46.66ID:u4qV17E7
>>890
バインディングはあまり関係ないな。どっちかというと依存の方向がV→VM→Mだというのが重要。
そういう意味でFormsで真似しても似て非なるもの。
2021/09/15(水) 21:09:50.88ID:jnuePZVr
すでに10年以上過ぎてて将来性とか言われても
枯れてる方に分類されると思うんだけど、一体どんな期待してるんだ
2021/09/15(水) 21:13:29.91ID:FpSMo0oE
>>903
その方向の連携もFormsでできますけど
2021/09/15(水) 21:43:58.90ID:u4qV17E7
>>905
その「連携」ってどういう意味で使ってる?
一般に依存の方向と制御の方向は別物だがここで重要なのは依存の方向。
2021/09/15(水) 22:43:25.21ID:FpSMo0oE
>>906
もちろんVの表示はVMとMに依存してるよ
2021/09/15(水) 23:04:57.93ID:jnuePZVr
依存っていうからてっきり依存関係プロパティの話かと思ったら、全然違ってた
2021/09/15(水) 23:17:22.66ID:u4qV17E7
>>907
やっぱりなんか理解してない。ここではいわゆるSOLID原則のDで言う依存性のこと。
MVVMでVが直接Mに依存することはない。
2021/09/15(水) 23:30:44.49ID:qRxK7g6Y
Vで必要なMを作るんだから依存しないわけがない
2021/09/15(水) 23:49:11.29ID:u4qV17E7
>Vで必要なMを作るんだから依存しないわけがない

「依存」の意味が通じてないとそもそも会話にならんな。
2021/09/15(水) 23:50:13.08ID:VJ+jTlKE
>>882
ReactivePropertyはメンテナーが実質ひとりだからなぁ。
その.Valueも意外と面倒くさいんだよね。
2021/09/15(水) 23:54:05.43ID:VJ+jTlKE
ObservableCollectionがAddRangeに対応して、
主要なWPFコントロールがAddイベントにてe.NewItemを同時に複数受け付けてくれれば神アプデなんだけどMSやってくれないかな。

ObservableCollection関連は、各ItemへのProperyChangedの登録/解除が超絶に面倒臭いんだけど、ReactivePropertyだとお手軽になる?
2021/09/16(木) 00:20:59.60ID:eraz+HIm
>>911
なんかFormsでMVVMできないことにするために適当な理屈をウダウダ後付けで言ってんな
2021/09/16(木) 00:38:24.68ID:tuIfCOpX
|\/| W(
916デフォルトの名無しさん
垢版 |
2021/09/16(木) 01:24:47.16ID:fPzViGfa
>>912
今はokazukiがメインメンテナ?
彼がやめたら俺がやるわ
917デフォルトの名無しさん
垢版 |
2021/09/16(木) 01:54:46.93ID:fPzViGfa
>>913
極力簡易記述できるようにしてると思うよ
2021/09/16(木) 03:51:43.21ID:x4RkoMHs
おまえら酒どんくらい飲んでる?
2021/09/16(木) 08:50:08.52ID:EaJ+z9b7
MVVMはXAMLやFXMLといったマークアップ言語があって初めて実現する
XAMLを信じないものに未来はありません
XAMLは偉大にして唯一神と3回唱えるのです
920デフォルトの名無しさん
垢版 |
2021/09/16(木) 12:17:15.94ID:jImn+LiB
ObservableCollectionで個々のItemのPropertyChangedを取りたいときって、
NotifyCollectionChangedAction.Add・RemoveにPropertyChangedのイベント購読を登録・解除
しますよね?

その配列をClear()しちゃったら、Removeでの解除を通らないと思うのですが、
この場合、メモリリークしますか?
2021/09/16(木) 12:57:51.05ID:eraz+HIm
>>920
NotifyCollectionChangedAction.Reset飛んでこない?
922デフォルトの名無しさん
垢版 |
2021/09/16(木) 13:30:05.34ID:jImn+LiB
>>921
自分も最初はReset飛んできたとき解除すればいいと思ったんですが、配列がすでに消去済みなので解除できないことに気づきました。
各ItemのコンストラクタとDisposeに登録解除を書くしかないのかな。
2021/09/16(木) 14:17:14.99ID:sOgFGA/J
>>903
向いてるかどうかは別にして、
FormをVとしてVMとM作ってバインディングすればMVVMできると思うんだが
>似て非なるもの
どこが異なるんだよ?
お前の言う本当のMVVMってなんだよ
2021/09/16(木) 14:20:02.81ID:sOgFGA/J
ああ、バインディングはMVVMの構成要件じゃないのね
ますますお前の意見がわからんわ
2021/09/16(木) 14:31:38.92ID:eraz+HIm
>>922
ObservableCollectionに
protected override void ClearItems()
ってのがあるから
ObservableCollectionの派生クラス作ってClearItems()をオーバーライド
ClearItemsが呼ばれたタイミングで購読解除すればいいと思う。
926デフォルトの名無しさん
垢版 |
2021/09/16(木) 14:37:43.93ID:eraz+HIm
>>922
public class MyCollection<T> : ObservableCollection<T>
{
protected override void ClearItems()
{
//ここで購読解除
base.ClearItems();
}
}
927デフォルトの名無しさん
垢版 |
2021/09/16(木) 15:14:51.39ID:jImn+LiB
>>926うおーすごい。stack overflowでもそこまでドンピシャな回答無かったです。
ありがとうございました。
2021/09/16(木) 15:50:04.83ID:4N92z3xf
コレクションをオーバライドして
改良するってアーキテクチャ知らない人多いね
929デフォルトの名無しさん
垢版 |
2021/09/16(木) 18:38:42.38ID:EvK5hxPz
結論としては、超絶に面倒臭いって事か
2021/09/16(木) 19:41:02.61ID:yaf4gWdF
仮にオーバライドしないで出来るならその方がずっと楽だしな
2021/09/16(木) 22:04:26.97ID:vfYN11/r
>>923
クリーンアーキティクチャのあの同心円の図を想像するとわかりやすい。一番外側がVで中心がM。
その依存性逆転のためにバインディングという仕組みを使っているだけに過ぎない。
2021/09/16(木) 23:23:17.08ID:8UT+IRDB
https://docs.microsoft.com/en-us/archive/blogs/johngossman/introduction-to-modelviewviewmodel-pattern-for-building-wpf-apps
バインディングが関係ないとか言ってる奴はこのMVVMの原典を読んでおくように
> Model/View/ViewModel also relies on one more thing: a general mechanism for data binding.
2021/09/17(金) 01:51:24.22ID:oPdLmI0u
In practice however, only a small subset of application UI can be data bound directly to the Model, especially if the Model is a pre-existing class or data schema over which the application developer has no control.
モデルが既存のクラスで開発者がコントロールできない場合は、UIの一部のみを直接モデルにバインドできます。
ってあるけど、既存のクラスなんてINotifyPropertyChanged実装してるわけないし、どういう意図なんだろ?
OneTimeならそりゃできるだろうけど。
2021/09/17(金) 02:13:01.71ID:OCPIK6qi
>>931
バインディングが単なる手段に過ぎないという意見は分かった
で、
>Formsで真似しても似て非なるもの。
はどういうことなんだ?
お前の言う真のMVVMとはどういったものなんだ?
2021/09/17(金) 07:24:25.96ID:9pvNRBKH
滅茶苦茶な機械翻訳を鵜呑みにして混乱してる初心者あるある
また断続的な絞首刑が発生しちゃうね
2021/09/17(金) 08:29:29.04ID:oPdLmI0u
>>935
正しい翻訳と意図を教えてください。
2021/09/18(土) 11:02:29.85ID:R9rxcswy
>>935
正しい翻訳と意図を教えてください。
2021/09/18(土) 13:27:50.51ID:+rKdBgY8
Microsoft Silverlightがオープンソース化、「OpenSilver」ベータ版リリース
https://news.mynavi.jp/article/20210916-1974193/
2021/09/18(土) 14:29:04.75ID:4CYZLhbb
>>938
MSはどっち行きたいねん?
一つがっちりしたのを標準で出せや!
2021/09/18(土) 14:42:52.80ID:hjEU6C9z
Silverlightは救済策だろう
メインストリームはWinUI
2021/09/18(土) 14:59:53.94ID:owvkbREO
ActiveXじゃなくてWASMベースになったってのが興味深いな。
デスクトップ版も用意したうえでBlazorと組み合わせてほしい。
2021/09/18(土) 15:32:32.42ID:kMbDjnXI
ソースジェネレーターでバインディング周り上手い事オーバーヘッド無しに出来んかな
2021/09/18(土) 15:59:37.03ID:+rKdBgY8
>>939
まだわからんの
オープンソースだよMSは
2021/09/18(土) 16:06:02.78ID:5s23uQXu
MSとどういう関係があるのか読んでも分からん
2021/09/18(土) 16:46:49.61ID:IMNNusNt
>>944
タイトルが悪いと思う
オリジナルのSilverlightをMSが作ったってだけで、MSはほぼ無関係だな
UserwareがWebAssemblyで動作するようにSilverlightを実装しなおしたものをオープンソースでリリースしただけ
2021/09/18(土) 16:50:07.13ID:IMNNusNt
Userwareって会社ね
既存のSilverlightアプリをSilverlightからOpenSilverに移行するソリューションを売るみたい
2021/09/18(土) 18:33:51.64ID:QLsNBOiE

オープンソースSilverlightか
光ちゃんも引っ張ってこい
2021/09/18(土) 19:08:58.03ID:+Oz1AToR
>>945
タイトルが悪いと言うかわざとだろ、これ
UserwareがMicrosoftからソース譲渡してもらったならわかるけど "reimplementation of Silverlight" だから要するに互換ソフトをオープンソースで作ったって話でしかない
2021/09/19(日) 04:13:06.67ID:/b0JgwvO
あれ?
さっき思ったんだけど、
C#でしかできないことってあるよね?
ループで回して同じものを複数表示するとか

逆にXAMLでしかできないことってあったっけ?
無い気がする・・・

そんでMVVMもXAMLなしで出来るんでしょ?
そしたらXAML要らんじゃん・・・
2021/09/19(日) 04:34:10.41ID:rCAdh0cW
世の中のDSL全部C言語で書けよ的な話か?
2021/09/19(日) 06:24:30.46ID:9XIs1/Nq
>>949
画面をXAMLで書けるのがWPFの一番のメリットなんだが
2021/09/19(日) 10:50:54.04ID:zoNPTzv8
XAMLは筋の悪い技術だよ
ループ等を無理矢理バインディングで実装しなきゃいけないために複雑怪奇になってる
普通に文字列のテンプレートエンジンか、Reactみたいにコードでよかった
MVUでは結局コードになったね
2021/09/19(日) 12:01:27.73ID:YE49AlZO
XAML Styler必須だよな、なぜVisual Studioに標準搭載しないのか
2021/09/19(日) 13:28:03.13ID:bqLn7Zqv
ループって何言ってるか分からんがリストのことならコレクションバインディングするだけでしょ
違うならすまん
2021/09/19(日) 13:52:08.27ID:dh1bYHy4
ObservableCollectionとListViewをバインドするだけとちゃうの?
2021/09/19(日) 14:12:08.70ID:/b0JgwvO
>>951
画面をXAMLで書けることの何がメリットなの?
2021/09/19(日) 14:13:52.23ID:/b0JgwvO
>>952
禿同
Viewと分けるにしても、XAMLなんか使わずにコードでいいじゃんね
2021/09/19(日) 14:17:30.11ID:/b0JgwvO
>>950 >>954-955
スマソ、確認だけど、
XAMLで出来ること = コードビハインドで出来ること
なん?
すべての機能が一対一で相互互換性あるの?
2021/09/19(日) 14:25:03.65ID:bqLn7Zqv
別にMVVMは強要されてる分けじゃない
使いたくなければ使わなくていいよ
2021/09/19(日) 14:26:01.77ID:bqLn7Zqv
MVVMじゃなくてxamlか
xaml無しでUI書くこともできるだろう、好きにすればいい
2021/09/19(日) 14:27:02.36ID:k8GedCcQ
メリットは宣言的なところ
jsさえあればDOMでdocumentを構築できるがやる奴なんかいないのと同じ
2021/09/19(日) 14:39:50.67ID:/b0JgwvO
>>960
全然答えになってない
XAMLでやってることすべてをコードビハインドで出来るのかって訊いてる
2021/09/19(日) 14:41:23.81ID:/b0JgwvO
>>961
コードでうまいこと宣言的にできないもんかね?
2021/09/19(日) 14:52:46.50ID:k8GedCcQ
>>963
目的と手段が逆転してるぞ
そのためにXAMLがあるんだろうが
965デフォルトの名無しさん
垢版 |
2021/09/19(日) 15:54:38.30ID:V+8kg11o
ReactのあれはReactだけのやり方だから好きじゃないな
966デフォルトの名無しさん
垢版 |
2021/09/19(日) 16:47:23.99ID:bqLn7Zqv
>>962
何でそんな失礼なん?
全部できるかどうかなんて証明でいないわ
MSに訊け
2021/09/19(日) 16:59:45.77ID:M6A2mfW9
>>956
・画面イメージそのままに階層構造で表現できるからXAMLを見ただけで画面イメージを把握できる。つまり画面デザイナが無くても困らないからVSCodeでも開発できる。
・diffで差分を確認しやすい。
・スニペット登録しておけばEmmetみたいに爆速で画面作成できる。
2021/09/19(日) 17:48:29.61ID:k97hf5Wx
XAML直接弄ることはあったけどデザイナーで結果見ながらだ
さすがプロだ。ちがうなあ…。
2021/09/19(日) 17:56:27.98ID:nIKY40XN
xamlでやってることはすべてコードビハインドできる
xamlで書けるものはそうした方が楽で速いってだけ
2021/09/19(日) 18:23:45.11ID:dWPcIkOu
>>954
例えば要素の特定のプロパティの値に応じてスタイルを変えたいとき、HTMLのテンプレートなら値に応じてifでCSSのクラスを切り替えるだけだよね
XAMLだとどうする?いちいちConverter作る?
2021/09/19(日) 18:38:16.20ID:z/QIU9f5
いちいちというかConverterはふつうに作ってるな。ある程度作ったらあとは使いまわせるし。
2021/09/19(日) 19:16:13.86ID:cbIcUE3M
お前がXAMLをどう思うかなんてのはどうでもいいことだ
アニオタが自分はこのアニメが好きでこのアニメが嫌いって言ってるのと変わらん
2021/09/19(日) 19:19:44.56ID:iNtXNZB3
>>970
DataTriggerを設定する
2021/09/19(日) 19:25:44.86ID:E5LuOPCO
>>969
何の速度の事をいってるのか判らんが、
動作速度はコードビハインドのが早いぞ
2021/09/19(日) 19:38:38.45ID:/b0JgwvO
>>964
サンクス
とりあえずコードだと宣言的にはできないということはわかった

>>967
サンクス
裏を返せば、コードだと画面がイメージできない・しにくい、と言ってるんだな、それは分かるかも
差分はイメージできる前提でメリットにはなり得る
スニペットってどの粒度で作ってあるんだろう?
それを標準で載せてくれよと思うわ
左のリストボックスで選択すると右のリストボックスに移る奴とかさ、結構使うだろ
2021/09/19(日) 19:40:34.61ID:lTTF8pbf
たぶん、動作速度の事いってないと思う
楽でっていってるから、開発速度とかじゃね
2021/09/19(日) 20:29:08.95ID:cF49PKlA
>>975
差分は〜のあたり何言ってるのか分からんが……
とりあえず最後の複数リストボックスのそれはたぶんコードビハインド書かないと無理
フォーカスの移動はバインディングで対応できなかったはずなので
2021/09/19(日) 20:29:10.32ID:cF49PKlA
>>975
差分は〜のあたり何言ってるのか分からんが……
とりあえず最後の複数リストボックスのそれはたぶんコードビハインド書かないと無理
フォーカスの移動はバインディングで対応できなかったはずなので
979デフォルトの名無しさん
垢版 |
2021/09/19(日) 22:15:48.20ID:V+8kg11o
動作速度にこだわるなら言語選び間違ってるよね
980デフォルトの名無しさん
垢版 |
2021/09/19(日) 23:23:28.51ID:bqLn7Zqv
>>970
色を変えるとか簡単な変化ならConverter
スタイルそのものを変えるならTemplateSelector
でもこれループ云々と関係ある?
2021/09/20(月) 00:49:08.80ID:Xe9wEhiD
>>980
Webのテンプレートエンジンを使ったことあるなら、そんな疑問が出てくる方が不思議なんだが
2021/09/20(月) 00:50:49.73ID:Urg8oj7a
>>977
そうかぁ、複数リストボックスはやっぱりコードビハインドが無いと無理そうなのか
フォーカスの移動がネックね
XAMLの限界って奴かな

こういうのがあるなら最初っから腹くくってコードビハインドで書いた方がいい気がしてきた
だって、XAMLで書いててどうやるんだろう?と悩んだ挙句、
結局コードビハインドしか解決法が無い、ということにもなりかねんからね

訂正:
差分はイメージできる前提でメリットにはなり得る

XAMLを見て画面がイメージできる人なら、diffで差分を確認しやすいのはメリットになり得る
まぁ、階層が増えたとか移動したとかは分かりやすいだろうな
983デフォルトの名無しさん
垢版 |
2021/09/20(月) 00:55:56.18ID:rs8t3f0k
>>981
イヤな言い方だね
あんな汚らしい記法は嫌いだわ
ループよりコレクションにバインディングする方が読みやすい(個人の感想です)
2021/09/20(月) 01:02:15.33ID:1ct4tbKZ
xamlはbamlにコンパイルされ理論上はC#コードより速くなるよ
少なくともMSのWPFチームはそう主張して
生C#にコンパイルするcamlを廃止したわけだし
なお実際に測定すると...
2021/09/20(月) 01:17:24.74ID:GKDt5rSn
>>984
それは単純ケースだけじゃ?

MSの公式のパフォーマンス改善の手引きに
バインデイングを止めるようにとあったと思うが...
2021/09/20(月) 01:19:47.53ID:GKDt5rSn
とにかく俺のプロジェクトじゃ
WPFのパフォーマンスの悪さがやり玉に上げられて
それは大変だった...
987デフォルトの名無しさん
垢版 |
2021/09/20(月) 01:25:48.63ID:nLJN3AnD
双方向バインディングをやめてOneWay等も使えって書いてあった気がする
2021/09/20(月) 01:35:10.41ID:rs8t3f0k
WPFのBindingは全部レイトだから遅いのは宿命だわな
UWPからx:Bindを逆輸入すればいいのにと思っていたけどもうWinUIに逝っちゃったからなあ
2021/09/20(月) 01:44:05.05ID:GKDt5rSn
とにかく、
バインデイングとかテンプレートのセレクターの動作をみれば、
遅くなるのは当たり前なんだよなーー
2021/09/20(月) 01:45:44.54ID:GKDt5rSn
>>988
そのx:Bindは早いの?
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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