2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2021/06/20(日) 17:04:18.66 ID:7UVkl7BZ.net
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/

874 :デフォルトの名無しさん:2021/09/14(火) 08:22:12.46 ID:Xw7cSOKQ.net
>>868
まだまだ初心者だな。
アプリに合わせて最適な実装方法を選択できるようにならなきゃ駄目だそ。道具は素材に合わせて使い分ける。
MVVMはあくまで道具の一つ。

875 :デフォルトの名無しさん:2021/09/14(火) 08:31:12.46 ID:ix6qKsp0.net
MVVMは目的じゃない

876 :デフォルトの名無しさん:2021/09/14(火) 10:03:00.45 ID:O0SG+hYH.net
>>873
ケースを想定せずにOKも何もないでしょうに

877 :デフォルトの名無しさん:2021/09/14(火) 12:11:35.18 ID:MzGXbjCU.net
コードビハインド禁止ゲームとか
アホの極み!

878 :デフォルトの名無しさん:2021/09/14(火) 13:51:43.59 ID:OUZkxtLl.net
今はPrismだけ使ってるけど、みんなReactiveProperty使ってるの?便利?

879 :デフォルトの名無しさん:2021/09/14(火) 19:55:37.76 ID:jxlCGXSG.net
>>874
もちろん、ポトペタやりたい人にとってはFormsがベストだしずっとそれを使い続けていればいい。

880 :デフォルトの名無しさん:2021/09/14(火) 20:32:08.68 ID:7Ijls0Z8.net
この辺は変な布教をした奴のせいでずっと尾を引いてるな

881 :デフォルトの名無しさん:2021/09/14(火) 21:59:50.08 ID:GpK/E3pW.net
>>874
WPF使うならMVVMが常に最適解
MVVMイヤならWinForm使えばええねん

882 :デフォルトの名無しさん:2021/09/14(火) 22:01:29.25 ID:GpK/E3pW.net
>>878
俺の個人的好みだとPrismは中小規模だと大げさすぎる
ReactivePropertyはもう手放せないレベル
でもいまだにBindingの .Valueを書き忘れてハマるw

883 :デフォルトの名無しさん:2021/09/14(火) 22:05:51.96 ID:bJ98HSzm.net
俺なんかWinFormsでやるときでさえReactiveProperty使ってMVVMやるようになってしまったよ

884 :デフォルトの名無しさん:2021/09/15(水) 01:05:39.31 ID:jggBe0Ff.net
ポトペタやりたいならノーコードローコードでいい

885 :デフォルトの名無しさん:2021/09/15(水) 06:31:36.42 ID:4HoLv0k1.net
>>879
そう考えるってことはWPFを全然使いこなせていないってことだぞ。
WPFはFormsと比べればMVVMとの親和性が高いが、MVVMで作りやすいってのはWPFのメリットのごく一部。

>>881
全然違う。
日本語もWPFも勉強しなおし。
MVVM使うな、じゃなくて使うべきものに使えって書いてある。
思考停止してWPFだから必ずMVVM、は技術者として恥ずかしいぞ。

>>883
FormsにMVVMは馴染まない。
ちゃんとフレームワークに合った設計をしないと。

886 :デフォルトの名無しさん:2021/09/15(水) 11:37:21.40 ID:S1ATpspQ.net
煽り屋は下痢便食わせて多摩川にでも流すぞ

887 :デフォルトの名無しさん:2021/09/15(水) 12:22:16.17 ID:jnuePZVr.net
君にはすべてのクラスに
void Update(bool force = true)
を書く事を許可しよう、頑張りたまえ

888 :デフォルトの名無しさん:2021/09/15(水) 12:50:15.43 ID:MMIM4SfG.net
言っている事は正しいしただの指摘、煽りではないだろ

889 :デフォルトの名無しさん:2021/09/15(水) 14:58:00.53 ID:3TKYe9Fz.net
>>885
>FormsにMVVMは馴染まない。
お前の感覚以外にちゃんとした理由があるならぜひ

890 :デフォルトの名無しさん:2021/09/15(水) 15:46:29.15 ID:u+gVrdUN.net
理由もクソも、MVVMはそもそもWPFのデータバインディングを活用するために考案されたデザインパターン
双方向バインディングを使用しないなら定義上MVVMではない

891 :デフォルトの名無しさん:2021/09/15(水) 15:57:04.37 ID:a6LjJ0wO.net
やったこと無いけどFormsでもデータバインディングできるんじゃ?

892 :デフォルトの名無しさん:2021/09/15(水) 16:02:38.01 ID:FpSMo0oE.net
>>890
Forms+ReactivePropertyで双方向バインディングやってるけど

893 :デフォルトの名無しさん:2021/09/15(水) 17:02:45.49 ID:3TKYe9Fz.net
>>890
お前の言うMVVMの定義を教えてくれ

894 :デフォルトの名無しさん:2021/09/15(水) 17:05:49.55 ID:QKlVFcsu.net
業界アキーテクチャ的には
双方向バインディングはバッドパターンだ
糞認定済み

895 :デフォルトの名無しさん:2021/09/15(水) 17:09:11.47 ID:QKlVFcsu.net
react等の先端frameworkに比べると
思想的にかなり見劣りする

896 :デフォルトの名無しさん:2021/09/15(水) 17:28:11.46 ID:wmRmGPP4.net
次はMVUだったっけ?

897 :デフォルトの名無しさん:2021/09/15(水) 18:32:29.56 ID:IqGZburM.net
実行ファイル(.exe)が出力できて将来性のある
プラットフォームってやっぱりWPFしかないのかな?

898 :デフォルトの名無しさん:2021/09/15(水) 18:36:43.11 ID:R2NlFkLx.net
将来性はないです

899 :デフォルトの名無しさん:2021/09/15(水) 18:36:44.91 ID:jnuePZVr.net
最先端はなんだろうAvaroniaとか?
SilverlightもWindows Phoneも、昔はいろいろあったよね

900 :デフォルトの名無しさん:2021/09/15(水) 18:47:44.45 ID:EcTTP5JU.net
>>897
WPFやるぐらいなら今後はWinUI3じゃ?

901 :デフォルトの名無しさん:2021/09/15(水) 19:00:42.07 ID:IqGZburM.net
WPFに将来性はあまりないのか

>>900
ありがとう。ちょっと調べてみる

902 :デフォルトの名無しさん:2021/09/15(水) 20:53:25.10 ID:bT20IgU4.net
>>885
日本語勉強するのはあんただよ

>

903 :デフォルトの名無しさん:2021/09/15(水) 21:01:46.66 ID:u4qV17E7.net
>>890
バインディングはあまり関係ないな。どっちかというと依存の方向がV→VM→Mだというのが重要。
そういう意味でFormsで真似しても似て非なるもの。

904 :デフォルトの名無しさん:2021/09/15(水) 21:09:50.88 ID:jnuePZVr.net
すでに10年以上過ぎてて将来性とか言われても
枯れてる方に分類されると思うんだけど、一体どんな期待してるんだ

905 :デフォルトの名無しさん:2021/09/15(水) 21:13:29.91 ID:FpSMo0oE.net
>>903
その方向の連携もFormsでできますけど

906 :デフォルトの名無しさん:2021/09/15(水) 21:43:58.90 ID:u4qV17E7.net
>>905
その「連携」ってどういう意味で使ってる?
一般に依存の方向と制御の方向は別物だがここで重要なのは依存の方向。

907 :デフォルトの名無しさん:2021/09/15(水) 22:43:25.21 ID:FpSMo0oE.net
>>906
もちろんVの表示はVMとMに依存してるよ

908 :デフォルトの名無しさん:2021/09/15(水) 23:04:57.93 ID:jnuePZVr.net
依存っていうからてっきり依存関係プロパティの話かと思ったら、全然違ってた

909 :デフォルトの名無しさん:2021/09/15(水) 23:17:22.66 ID:u4qV17E7.net
>>907
やっぱりなんか理解してない。ここではいわゆるSOLID原則のDで言う依存性のこと。
MVVMでVが直接Mに依存することはない。

910 :デフォルトの名無しさん:2021/09/15(水) 23:30:44.49 ID:qRxK7g6Y.net
Vで必要なMを作るんだから依存しないわけがない

911 :デフォルトの名無しさん:2021/09/15(水) 23:49:11.29 ID:u4qV17E7.net
>Vで必要なMを作るんだから依存しないわけがない

「依存」の意味が通じてないとそもそも会話にならんな。

912 :デフォルトの名無しさん:2021/09/15(水) 23:50:13.08 ID:VJ+jTlKE.net
>>882
ReactivePropertyはメンテナーが実質ひとりだからなぁ。
その.Valueも意外と面倒くさいんだよね。

913 :デフォルトの名無しさん:2021/09/15(水) 23:54:05.43 ID:VJ+jTlKE.net
ObservableCollectionがAddRangeに対応して、
主要なWPFコントロールがAddイベントにてe.NewItemを同時に複数受け付けてくれれば神アプデなんだけどMSやってくれないかな。

ObservableCollection関連は、各ItemへのProperyChangedの登録/解除が超絶に面倒臭いんだけど、ReactivePropertyだとお手軽になる?

914 :デフォルトの名無しさん:2021/09/16(木) 00:20:59.60 ID:eraz+HIm.net
>>911
なんかFormsでMVVMできないことにするために適当な理屈をウダウダ後付けで言ってんな

915 :デフォルトの名無しさん:2021/09/16(木) 00:38:24.68 ID:tuIfCOpX.net
|\/| W(

916 :デフォルトの名無しさん:2021/09/16(木) 01:24:47.16 ID:fPzViGfa.net
>>912
今はokazukiがメインメンテナ?
彼がやめたら俺がやるわ

917 :デフォルトの名無しさん:2021/09/16(木) 01:54:46.93 ID:fPzViGfa.net
>>913
極力簡易記述できるようにしてると思うよ

918 :デフォルトの名無しさん:2021/09/16(木) 03:51:43.21 ID:x4RkoMHs.net
おまえら酒どんくらい飲んでる?

919 :デフォルトの名無しさん:2021/09/16(木) 08:50:08.52 ID:EaJ+z9b7.net
MVVMはXAMLやFXMLといったマークアップ言語があって初めて実現する
XAMLを信じないものに未来はありません
XAMLは偉大にして唯一神と3回唱えるのです

920 :デフォルトの名無しさん:2021/09/16(木) 12:17:15.94 ID:jImn+LiB.net
ObservableCollectionで個々のItemのPropertyChangedを取りたいときって、
NotifyCollectionChangedAction.Add・RemoveにPropertyChangedのイベント購読を登録・解除
しますよね?

その配列をClear()しちゃったら、Removeでの解除を通らないと思うのですが、
この場合、メモリリークしますか?

921 :デフォルトの名無しさん:2021/09/16(木) 12:57:51.05 ID:eraz+HIm.net
>>920
NotifyCollectionChangedAction.Reset飛んでこない?

922 :デフォルトの名無しさん:2021/09/16(木) 13:30:05.34 ID:jImn+LiB.net
>>921
自分も最初はReset飛んできたとき解除すればいいと思ったんですが、配列がすでに消去済みなので解除できないことに気づきました。
各ItemのコンストラクタとDisposeに登録解除を書くしかないのかな。

923 :デフォルトの名無しさん:2021/09/16(木) 14:17:14.99 ID:sOgFGA/J.net
>>903
向いてるかどうかは別にして、
FormをVとしてVMとM作ってバインディングすればMVVMできると思うんだが
>似て非なるもの
どこが異なるんだよ?
お前の言う本当のMVVMってなんだよ

924 :デフォルトの名無しさん:2021/09/16(木) 14:20:02.81 ID:sOgFGA/J.net
ああ、バインディングはMVVMの構成要件じゃないのね
ますますお前の意見がわからんわ

925 :デフォルトの名無しさん:2021/09/16(木) 14:31:38.92 ID:eraz+HIm.net
>>922
ObservableCollectionに
protected override void ClearItems()
ってのがあるから
ObservableCollectionの派生クラス作ってClearItems()をオーバーライド
ClearItemsが呼ばれたタイミングで購読解除すればいいと思う。

926 :デフォルトの名無しさん:2021/09/16(木) 14:37:43.93 ID:eraz+HIm.net
>>922
public class MyCollection<T> : ObservableCollection<T>
{
protected override void ClearItems()
{
//ここで購読解除
base.ClearItems();
}
}

927 :デフォルトの名無しさん:2021/09/16(木) 15:14:51.39 ID:jImn+LiB.net
>>926うおーすごい。stack overflowでもそこまでドンピシャな回答無かったです。
ありがとうございました。

928 :デフォルトの名無しさん:2021/09/16(木) 15:50:04.83 ID:4N92z3xf.net
コレクションをオーバライドして
改良するってアーキテクチャ知らない人多いね

929 :デフォルトの名無しさん:2021/09/16(木) 18:38:42.38 ID:EvK5hxPz.net
結論としては、超絶に面倒臭いって事か

930 :デフォルトの名無しさん:2021/09/16(木) 19:41:02.61 ID:yaf4gWdF.net
仮にオーバライドしないで出来るならその方がずっと楽だしな

931 :デフォルトの名無しさん:2021/09/16(木) 22:04:26.97 ID:vfYN11/r.net
>>923
クリーンアーキティクチャのあの同心円の図を想像するとわかりやすい。一番外側がVで中心がM。
その依存性逆転のためにバインディングという仕組みを使っているだけに過ぎない。

932 :デフォルトの名無しさん:2021/09/16(木) 23:23:17.08 ID:8UT+IRDB.net
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.

933 :デフォルトの名無しさん:2021/09/17(金) 01:51:24.22 ID:oPdLmI0u.net
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ならそりゃできるだろうけど。

934 :デフォルトの名無しさん:2021/09/17(金) 02:13:01.71 ID:OCPIK6qi.net
>>931
バインディングが単なる手段に過ぎないという意見は分かった
で、
>Formsで真似しても似て非なるもの。
はどういうことなんだ?
お前の言う真のMVVMとはどういったものなんだ?

935 :デフォルトの名無しさん:2021/09/17(金) 07:24:25.96 ID:9pvNRBKH.net
滅茶苦茶な機械翻訳を鵜呑みにして混乱してる初心者あるある
また断続的な絞首刑が発生しちゃうね

936 :デフォルトの名無しさん:2021/09/17(金) 08:29:29.04 ID:oPdLmI0u.net
>>935
正しい翻訳と意図を教えてください。

937 :デフォルトの名無しさん:2021/09/18(土) 11:02:29.85 ID:R9rxcswy.net
>>935
正しい翻訳と意図を教えてください。

938 :デフォルトの名無しさん:2021/09/18(土) 13:27:50.51 ID:+rKdBgY8.net
Microsoft Silverlightがオープンソース化、「OpenSilver」ベータ版リリース
https://news.mynavi.jp/article/20210916-1974193/

939 :デフォルトの名無しさん:2021/09/18(土) 14:29:04.75 ID:4CYZLhbb.net
>>938
MSはどっち行きたいねん?
一つがっちりしたのを標準で出せや!

940 :デフォルトの名無しさん:2021/09/18(土) 14:42:52.80 ID:hjEU6C9z.net
Silverlightは救済策だろう
メインストリームはWinUI

941 :デフォルトの名無しさん:2021/09/18(土) 14:59:53.94 ID:owvkbREO.net
ActiveXじゃなくてWASMベースになったってのが興味深いな。
デスクトップ版も用意したうえでBlazorと組み合わせてほしい。

942 :デフォルトの名無しさん:2021/09/18(土) 15:32:32.42 ID:kMbDjnXI.net
ソースジェネレーターでバインディング周り上手い事オーバーヘッド無しに出来んかな

943 :デフォルトの名無しさん:2021/09/18(土) 15:59:37.03 ID:+rKdBgY8.net
>>939
まだわからんの
オープンソースだよMSは

944 :デフォルトの名無しさん:2021/09/18(土) 16:06:02.78 ID:5s23uQXu.net
MSとどういう関係があるのか読んでも分からん

945 :デフォルトの名無しさん:2021/09/18(土) 16:46:49.61 ID:IMNNusNt.net
>>944
タイトルが悪いと思う
オリジナルのSilverlightをMSが作ったってだけで、MSはほぼ無関係だな
UserwareがWebAssemblyで動作するようにSilverlightを実装しなおしたものをオープンソースでリリースしただけ

946 :デフォルトの名無しさん:2021/09/18(土) 16:50:07.13 ID:IMNNusNt.net
Userwareって会社ね
既存のSilverlightアプリをSilverlightからOpenSilverに移行するソリューションを売るみたい

947 :デフォルトの名無しさん:2021/09/18(土) 18:33:51.64 ID:QLsNBOiE.net

オープンソースSilverlightか
光ちゃんも引っ張ってこい

948 :デフォルトの名無しさん:2021/09/18(土) 19:08:58.03 ID:+Oz1AToR.net
>>945
タイトルが悪いと言うかわざとだろ、これ
UserwareがMicrosoftからソース譲渡してもらったならわかるけど "reimplementation of Silverlight" だから要するに互換ソフトをオープンソースで作ったって話でしかない

949 :デフォルトの名無しさん:2021/09/19(日) 04:13:06.67 ID:/b0JgwvO.net
あれ?
さっき思ったんだけど、
C#でしかできないことってあるよね?
ループで回して同じものを複数表示するとか

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

そんでMVVMもXAMLなしで出来るんでしょ?
そしたらXAML要らんじゃん・・・

950 :デフォルトの名無しさん:2021/09/19(日) 04:34:10.41 ID:rCAdh0cW.net
世の中のDSL全部C言語で書けよ的な話か?

951 :デフォルトの名無しさん:2021/09/19(日) 06:24:30.46 ID:9XIs1/Nq.net
>>949
画面をXAMLで書けるのがWPFの一番のメリットなんだが

952 :デフォルトの名無しさん:2021/09/19(日) 10:50:54.04 ID:zoNPTzv8.net
XAMLは筋の悪い技術だよ
ループ等を無理矢理バインディングで実装しなきゃいけないために複雑怪奇になってる
普通に文字列のテンプレートエンジンか、Reactみたいにコードでよかった
MVUでは結局コードになったね

953 :デフォルトの名無しさん:2021/09/19(日) 12:01:27.73 ID:YE49AlZO.net
XAML Styler必須だよな、なぜVisual Studioに標準搭載しないのか

954 :デフォルトの名無しさん:2021/09/19(日) 13:28:03.13 ID:bqLn7Zqv.net
ループって何言ってるか分からんがリストのことならコレクションバインディングするだけでしょ
違うならすまん

955 :デフォルトの名無しさん:2021/09/19(日) 13:52:08.27 ID:dh1bYHy4.net
ObservableCollectionとListViewをバインドするだけとちゃうの?

956 :デフォルトの名無しさん:2021/09/19(日) 14:12:08.70 ID:/b0JgwvO.net
>>951
画面をXAMLで書けることの何がメリットなの?

957 :デフォルトの名無しさん:2021/09/19(日) 14:13:52.23 ID:/b0JgwvO.net
>>952
禿同
Viewと分けるにしても、XAMLなんか使わずにコードでいいじゃんね

958 :デフォルトの名無しさん:2021/09/19(日) 14:17:30.11 ID:/b0JgwvO.net
>>950 >>954-955
スマソ、確認だけど、
XAMLで出来ること = コードビハインドで出来ること
なん?
すべての機能が一対一で相互互換性あるの?

959 :デフォルトの名無しさん:2021/09/19(日) 14:25:03.65 ID:bqLn7Zqv.net
別にMVVMは強要されてる分けじゃない
使いたくなければ使わなくていいよ

960 :デフォルトの名無しさん:2021/09/19(日) 14:26:01.77 ID:bqLn7Zqv.net
MVVMじゃなくてxamlか
xaml無しでUI書くこともできるだろう、好きにすればいい

961 :デフォルトの名無しさん:2021/09/19(日) 14:27:02.36 ID:k8GedCcQ.net
メリットは宣言的なところ
jsさえあればDOMでdocumentを構築できるがやる奴なんかいないのと同じ

962 :デフォルトの名無しさん:2021/09/19(日) 14:39:50.67 ID:/b0JgwvO.net
>>960
全然答えになってない
XAMLでやってることすべてをコードビハインドで出来るのかって訊いてる

963 :デフォルトの名無しさん:2021/09/19(日) 14:41:23.81 ID:/b0JgwvO.net
>>961
コードでうまいこと宣言的にできないもんかね?

964 :デフォルトの名無しさん:2021/09/19(日) 14:52:46.50 ID:k8GedCcQ.net
>>963
目的と手段が逆転してるぞ
そのためにXAMLがあるんだろうが

965 :デフォルトの名無しさん:2021/09/19(日) 15:54:38.30 ID:V+8kg11o.net
ReactのあれはReactだけのやり方だから好きじゃないな

966 :デフォルトの名無しさん:2021/09/19(日) 16:47:23.99 ID:bqLn7Zqv.net
>>962
何でそんな失礼なん?
全部できるかどうかなんて証明でいないわ
MSに訊け

967 :デフォルトの名無しさん:2021/09/19(日) 16:59:45.77 ID:M6A2mfW9.net
>>956
・画面イメージそのままに階層構造で表現できるからXAMLを見ただけで画面イメージを把握できる。つまり画面デザイナが無くても困らないからVSCodeでも開発できる。
・diffで差分を確認しやすい。
・スニペット登録しておけばEmmetみたいに爆速で画面作成できる。

968 :デフォルトの名無しさん:2021/09/19(日) 17:48:29.61 ID:k97hf5Wx.net
XAML直接弄ることはあったけどデザイナーで結果見ながらだ
さすがプロだ。ちがうなあ…。

969 :デフォルトの名無しさん:2021/09/19(日) 17:56:27.98 ID:nIKY40XN.net
xamlでやってることはすべてコードビハインドできる
xamlで書けるものはそうした方が楽で速いってだけ

970 :デフォルトの名無しさん:2021/09/19(日) 18:23:45.11 ID:dWPcIkOu.net
>>954
例えば要素の特定のプロパティの値に応じてスタイルを変えたいとき、HTMLのテンプレートなら値に応じてifでCSSのクラスを切り替えるだけだよね
XAMLだとどうする?いちいちConverter作る?

971 :デフォルトの名無しさん:2021/09/19(日) 18:38:16.20 ID:z/QIU9f5.net
いちいちというかConverterはふつうに作ってるな。ある程度作ったらあとは使いまわせるし。

972 :デフォルトの名無しさん:2021/09/19(日) 19:16:13.86 ID:cbIcUE3M.net
お前がXAMLをどう思うかなんてのはどうでもいいことだ
アニオタが自分はこのアニメが好きでこのアニメが嫌いって言ってるのと変わらん

973 :デフォルトの名無しさん:2021/09/19(日) 19:19:44.56 ID:iNtXNZB3.net
>>970
DataTriggerを設定する

974 :デフォルトの名無しさん:2021/09/19(日) 19:25:44.86 ID:E5LuOPCO.net
>>969
何の速度の事をいってるのか判らんが、
動作速度はコードビハインドのが早いぞ

総レス数 1001
260 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver.24052200