WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part21 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/05/09(火) 09:09:13.94ID:KhhA22kJ
Windows Presentation Frameworkについて語るスレ。

前スレ
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part20
http://echo.2ch.net/test/read.cgi/tech/1458082648/

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

コードを貼る場合は以下のサイトの利用をお勧め。
run codeのチェックは外しておきましょう。
http://ideone.com/
2017/10/10(火) 18:13:20.63ID:F7yEQysJ
>>586
お前んとこよ業務システムはスマホOnlyかよwww
2017/10/10(火) 18:23:28.85ID:PFEgPN/G
>>587
死ねよ
2017/10/10(火) 18:27:52.56ID:ZTVh7Eud
>>589
それが職員の本音
2017/10/10(火) 19:40:17.75ID:e0oQHeX4
>>585
vb6の業務システムを泣きながらWindows10対応している俺の立場は。
なーんもしなくてもそのまま問題なく動いてるっぽい(ーー;)
2017/10/10(火) 20:02:50.32ID:kFuua7X2
VB6はドトネトより明らかに早いから、しっかり作ってあるとWinFormsなど見た目で差別化が出来ない場合辛いものが有るね
まあメンテするこっちからみたらクソ言語では有るが
2017/10/10(火) 20:16:48.02ID:e0oQHeX4
アプリケーションは速ければ速いほど良い。
vb6ってこんなに軽かったっけって思うよ。
でもこんな仕事はいやズラ(T_T)
2017/10/10(火) 20:49:55.22ID:RwG/jnVL
いくら速くてもメモリリークするようなゴミでは使い物にならない
やっぱりWPFだな


GdiplusStartup と GdiplusShutdown を繰り返すとメモリ リークする
https://blogs.msdn.microsoft.com/japan_platform_sdkwindows_sdk_support_team_blog/2017/10/10/gdiplus-tsf-memleak/

>現在、この問題を修正する予定がありません。
2017/10/10(火) 21:03:07.74ID:ZTVh7Eud
>>594
これってそんなに頻度高いの?
2017/10/10(火) 21:03:53.95ID:MPxouh5p
いくらメモリーリークしなくても日が暮れる前に仕事を終えてくれないとなー
2017/10/10(火) 23:05:52.56ID:2hrMSkCE
gdi++の初期化/終了なんぞ頻繁に呼び出すことはないからどうでもええけど
それより原因となるTSFのリーク発生条件がやべえな
ダミーウィンドウと共にスレッド起こすのは小細工としてそこそこ出番があるような
2017/10/10(火) 23:15:47.61ID:TI1DggQu
>>597
思いっきり当てはまる作りをしているアプリがあるわ。
生成頻度は少ないからまぁ大丈夫だろうけども。
2017/10/11(水) 03:31:53.05ID:rqqSAVqs
>>591
掘”った栗
2017/10/11(水) 09:39:19.59ID:kukuoK5s
>>539
デバッグしたい//
2017/10/11(水) 10:10:09.73ID:gUlGhM8/
DatetimepickerってWPFに無いんだ…
日付と時間表示どうすんの…
602デフォルトの名無しさん
垢版 |
2017/10/11(水) 10:44:22.63ID:9HbYpl43
今アフリカでは飢えた子供たくさんいます。皆さんの寄付をお待ちしております。
2017/10/11(水) 10:57:59.00ID:kaZdUJxk
>>602
スピンも無いぞw
Extended WPF Toolkitを使え
604デフォルトの名無しさん
垢版 |
2017/10/11(水) 12:00:31.23ID:9HbYpl43
>>603
https://fresh.lawson.jp/goods/70999
2017/10/11(水) 14:15:19.34ID:xGB2zgmM
>>599
ぼっても割に合わん。
動作不良じゃなく元々のバグがかなりあるOrz
当時のブビプログラマーのレベルはこんなもんだがw
2017/10/11(水) 17:54:00.03ID:mza9tdHV
>>532
最初の敷居はちょいと高いかもだが
このフレームワークの考え方に慣れたら便利だよ
2017/10/11(水) 19:06:58.99ID:Qsqjym7k
慣れたら便利は不便ってviで学んだ。
2017/10/11(水) 19:31:07.43ID:o57WAIx5
不便じゃないがxamlは微妙だわさ
2017/10/11(水) 19:44:00.46ID:2kA0LIge
mvvmやxaml,データーバインディングは作りたいアプリがあったので作りながら覚えれたけど、次のステップとしてリアクティブプログラミングやろうとしたがリアクティブはかなり敷居高そうだな
2017/10/11(水) 19:45:55.55ID:CGuaZ+CK
WinFormsでカスタムコントロール作ってオーナードローした人じゃないと
wpfの有り難みは理解できんかもな
そりゃコントロール並べるだけならwinfromsのほうが遥かに簡単だ
2017/10/11(水) 19:51:44.60ID:o57WAIx5
少なくともWordが使いこなせないとxamlは無理ね。
2017/10/11(水) 19:55:42.90ID:ff6iD1XD
なんでコントロール並べるだけのことが後発のWPFでは難しいんだろうな

WinFormsでできることがXAMLを一切触らずにがUIデザイナでできたら、
結果は違ったんだろうか?
2017/10/11(水) 20:14:17.44ID:wRfMxQMF
>>609
ReactiveProperty/ReactiveCommandの話なら、すごく楽だよ。
逆に今までの苦労は何だったのかと思うほど。
2017/10/11(水) 20:26:19.51ID:CGuaZ+CK
uwpでReactiveCommand使う時、disposeのタイミングで例外吐く不具合があってエライ目に有ったんだが
アレは治ったんだろうか?
2017/10/11(水) 21:11:58.60ID:/ydphcqk
遅いらしいし、コントロール揃ってないし、なんかめんどくさそうだし、将来WPFが
主流になるんだったら覚えてもいいけど、まあもうちょっと枯れてからでいいやと
思い続けてとうとう今日に至る
2017/10/11(水) 21:19:31.21ID:o57WAIx5
>>615
10年経っでるのに枯れてないとな。
2017/10/11(水) 22:29:17.19ID:Qsqjym7k
winfromやwindows7で困ってない人を移行させるのは難しい。
それ以前に移行すると困る人が大勢いるのはMSの怠慢と言わざるをえない。
618デフォルトの名無しさん
垢版 |
2017/10/12(木) 10:14:35.23ID:EMta15tJ
アスペのすきなC#
2017/10/12(木) 10:27:32.93ID:WR+PJUQy
奴隷の好きな言語は?
2017/10/12(木) 12:10:11.06ID:knGok4Ah
Java
2017/10/12(木) 12:20:51.67ID:WR+PJUQy
Java案件には関わりとうない
622デフォルトの名無しさん
垢版 |
2017/10/12(木) 12:46:50.56ID:iASiM5mX
アスペが釣れる
2017/10/14(土) 08:02:49.68ID:tNAfEAYV
Java案件にはデスマが待っている。関わりとうない、関わりとうない♪
2017/10/15(日) 10:50:00.14ID:fX+zjWfL
>>613
それは、ある程度使えるようになってからだろ?
その前段階の覚える段階の敷居が(目標がないと)高いって意味じゃね?
2017/10/15(日) 11:14:02.79ID:+yNynBs6
>>624
prismなんかで組んでいるようだから、2,30分も有れば基本的なことは出来るよ
2017/10/16(月) 04:26:03.95ID:wsZRBdk3
xamarinがwpf/mac/gtk#にも対応するようなのでいよいよ本当に終わりですか
2017/10/16(月) 06:45:42.59ID:Q+N/9tOC
あの人達キモいからヤダ
2017/10/16(月) 09:15:22.42ID:z1iVQjyz
チンポ騎士団員は帰っていいよ
2017/11/02(木) 09:54:27.69ID:isNfJMq0
MVVMが全く理解できん
プログラミング初心者には無理な壁か…
2017/11/02(木) 10:01:40.38ID:J8+i6TGJ
>>629
先ずはビューモデルとバインドから。
イベントはベタ書きでもおっけ。
2017/11/02(木) 10:14:35.62ID:39jE09AN
個人開発の規模だと、ビューとモデルを分割する事のメリットからしてあまり感じられないだろうから無理も無い
2017/11/02(木) 10:18:50.35ID:NmY3JO0d
VとVMの切り分けはよく分かるんだけど
VMとMの切り分けがよく分からないんだよね

データがRDBにあるとして
VMでSQL書くのはMVVM的にNG?
2017/11/02(木) 10:50:49.04ID:sQ3NutSu
prism.UnityとかAutofac等のDIコンテナ使うとMVVMの理解は深まるけど
DIコンテナの理解を深めないといけないという自転車操業
2017/11/02(木) 11:08:24.23ID:jCGmdkaF
>>632
同じくVMとMの切り分けがあいまいになっている自分
RDBはビジネス要件だからどちらかというとModelとして切り離すべき
2017/11/02(木) 12:34:30.50ID:6vVGKMs0
テストコード書かないのなら分離しなくても問題ないでしょ。
2017/11/02(木) 12:50:22.73ID:3t3P1FsS
設計者俺実装者俺利用者俺の3俺構造だとMVVMの恩恵はあまりない
一応恩恵あるけどスゲー便利というほどじゃない
どちらかというとObservableCollectionやMicro-ORMの理解の方が大事だと思う
2017/11/02(木) 18:47:26.55ID:YdwoTlH6
Viewの部分入れ変えても大丈夫な程度にしておけばいいと思う。
2017/11/03(金) 09:44:58.25ID:QTbHfBOQ
WPFに何を求めるか次第じゃないの?
MVVMとしての美しさを求めるか、単にUIとしての美しさを求めるか。
オレの場合はUIの美しさしか求めないんでMVVMはどうでもええ。
2017/11/03(金) 09:52:50.24ID:9WRa7/YE
>>632,634
コンソールから使うコマンドラインアプリとして書いてみれば、何がModelなのか分かるよ
そのModelをGUIとかの特定のViewに合致させる役割がViewModel
2017/11/03(金) 09:56:57.17ID:wXWM393A
アプリの規模にもよるかな
2017/11/03(金) 10:02:02.08ID:ATL1IZSq
画面作るのはXAMLが楽で良いなぁ。
2017/11/04(土) 07:58:35.78ID:cFRpAK1r
MVVMで作るときのソリューションのフォルダ構成どうしてますか?

Models/Views/ViewModelsの下にPages/UserControlsなどを置くか、その逆にするかで迷う。
2017/11/04(土) 08:15:23.15ID:1K2n1JV6
>>642
機能で分ける
M/V/VMは区別しない
MVVMに限ったことじゃないけど、一般に、種類で分けるのはモジュール強度の低い良くない分け方だよ
2017/11/04(土) 08:19:20.77ID:+71Y93dj
迷うってことは、問題が解決してないってこと。つまり失敗した概念だと言えるな。
2017/11/04(土) 08:46:00.62ID:jl0ZLZ4q
分けるというより、目障りだからどかす、というイメージが強い
意味合いが#regionに通じてるところがある
2017/11/04(土) 08:53:48.77ID:7G3CwTrC
たしかにViewにプラスで必要な部分は迷うわ
2017/11/04(土) 09:11:02.86ID:5h9DYzfZ
>>642
xamlとVMは同じフォルダ内に置いてる。
648デフォルトの名無しさん
垢版 |
2017/11/05(日) 23:23:33.87ID:TdKcbL6p
データコンテキストってなんなの…
全然使い方がわからない…
WPFほんと難しい…自分の頭の悪さに引くわ…
2017/11/05(日) 23:37:19.03ID:Fa7z1jl7
そんなとこで詰まってるならやめた方がいいんじゃない?
テンプレートバインディングや依存関係プロパティで死ぬよ
2017/11/05(日) 23:42:44.11ID:fpg0wyCq
ルーティングイベントとかクッソ意味不明
Adornerとかレイアウトイベントの使い分けとかDrawing系の低レベル描画層とかゲロ複雑すぎてやばい
2017/11/05(日) 23:50:24.22ID:fpg0wyCq
あと見た目の状態遷移に使うVSMも癖があって慣れるまでクソ難しい
WPFの場合は更にトリガとの使い分けもあってカオスの極み
2017/11/05(日) 23:57:03.43ID:fpg0wyCq
あとWIC系のAPIもヤバい
たかがビットマップイメージがなんでここまで複雑になるのか不思議なレベル
2017/11/06(月) 01:08:49.29ID:g6YJakDt
>>648
すごく単純に言えば、バインディングに使用する複数の変数を任意の1つのオブジェクト(クラス)にまとめておくだけの機能だよ。
(各変数はそれぞれプロパティとして定義する)
654デフォルトの名無しさん
垢版 |
2017/11/06(月) 02:23:58.85ID:Xbh99dPN
DataContextやDependencyPropertyは使ってりゃそのうち分かるようになるし
一度分かってしまえばどうということもない

VisualStateManagerは確かに難しい
つか使いこなせん
Styleのカスタマイズは未だに試行錯誤というか行き当たりばったりだわ
2017/11/06(月) 13:12:40.27ID:TOtQu/eL
>>653
んー…分からん…
色んなサイト見ても全部微妙に違ってどれを参考にしたら良いかもわからん
MVVMだとどの部分に書くんだ?
2017/11/06(月) 13:38:43.96ID:3xHBnL7y
んー…なんというか…。書くとか書かないとかというか、、データソースなんだよ
2017/11/06(月) 13:55:11.78ID:2nM3KO37
>>655
Contextって名前が曖昧すぎる。
DataHogeと同じで名前に意味はない。
DataContextにはViewModelのインスタンスを設定してDataCintext=ViewModelだと思ってればよいのだ。
2017/11/06(月) 18:15:34.67ID:6TjQQ+65
>>648
難しいのは考え方だろうね
データコンテキストが難しいと感じるなら、根本的に発想の転換が必要なんだと思う
2017/11/06(月) 18:26:51.77ID:8k9yKas+
WPFが流行らなかった縮図を見ているかのようだ…
2017/11/06(月) 22:34:37.38ID:S0HGA2wI
WinForms時代のデータソースも分からない人だろ。
2017/11/06(月) 22:42:59.34ID:FcoeWLYn
>>656
>>657
>>658

せっかく説明してくれてるのに理解出来なくてごめんよ…
元々プログラミング始めたばかりの自分にはハードル高いよな…
this.DataContext=table;
とかだとXAMLにBinding tableって指定してる所と紐づけるって解釈で良いのかな?

MVVMでアプリを作ってみてるんだけど、C#の言語自体の理解もまだまだだからすげぇ難しい…
this.DataContext=table;←これもModelクラスに書くべきなのかViewModelに書くのかよく分かってない

View→ViewModel→Modelって関係になっててV,VMとMは切り離して考えるのは分かるんだけど、例えばModelクラスに書いてる処理(例えばデータベースの値をDataGridに表示させるとか)をどうやってViewModelから取得したらいいの?
プロパティとか使うの?
662デフォルトの名無しさん
垢版 |
2017/11/06(月) 23:48:48.36ID:VYb2y8+k
>>661
それは Xamlには Binding だけでいい
663デフォルトの名無しさん
垢版 |
2017/11/06(月) 23:51:37.56ID:VYb2y8+k
知識ないうちはXamlは地獄

知識あってもタイプミスとかでデバッグがものすごくつらい
いろいろ無駄なことをさせられる
2017/11/07(火) 00:02:15.24ID:bJd82uh3
俺の理解ではDataContextはBinding SouceとBinding Targetのつなぎ目

DataContextを設定してはじめてSouceとTargetは赤い糸で結ばれる
2017/11/07(火) 01:05:32.39ID:doVlH5i0
>>661
細かいことは省略した大雑把な例だけど、
class Table
{
 int A { set; get; }
 int B { set; get; }
}
this.DataContext=new Table();
と設定しておくと、{Binding Path=A}とか{Binding Path=B}って書けるようになる。("Path="は省略可)
2017/11/07(火) 01:51:17.40ID:cse8gTk6
>>661
まず、データベースとか関係なくDataGridに何か(例えば1〜10)を表示することを考える
そうするとModelは必要ないからViewModelに全てを書く
ViewModelがViewのために1〜10を教えてあげるとViewはViewModelの言うがまま表示する
このことをViewModelにdatabindingしていると呼ぶ
しかし、いつも1〜10を表示しても何の役にも立たない
目的に応じて適切な値を表示したい
この1〜10ではなく目的に応じた適切な値を管理するのがModelの役割
例えば、データベースから31415926534とか取ってきたりする
2017/11/07(火) 06:48:36.59ID:QsHhWiO1
>>661
ビューモデルとデータコンテキストの紐付けはxamlの中に記述する。
xamlはhtml見たいな画面記述言語じゃなくてc#(.net)のインスタンスを記述する言語。
2017/11/07(火) 07:00:14.02ID:QsHhWiO1
>>661
>どうやってViewModelから取得したらいいの?
プロパティとか使うの?

バインドさせる。
2017/11/07(火) 09:12:12.63ID:lDMoKAlX
>>667
>xamlはhtml見たいな画面記述言語じゃなくてc#(.net)のインスタンスを記述する言語。
それXAML一般じゃなくてWPF限定だから気をつけた方がいいよ
UWPやSilverlightでは.NETオブジェクトはアンマネージドなXAML DOMのラッパー
だからC#でツリー組むよりXAMLをテキストで読ませたほうが速かったりする
2017/11/07(火) 09:22:10.77ID:y4hb8FzZ
>>669
そうなの?
じゃ、UWPのxamlとWPFのではかなり別もんなのか
2017/11/07(火) 09:39:39.90ID:QoqDyUp+
>>669
それじゃUWPのobjフォルダに有る xxx.g.csファイルって一体何だ?
2017/11/07(火) 11:28:45.06ID:J9S6QLG4
一発目でwpfはツレーだろうな。理解していることの前提要素が多すぎる
2017/11/07(火) 11:42:33.72ID:2j0EGKvx
MVVMに手を出すとさらにつらくなるね
2017/11/07(火) 12:39:39.96ID:jxgrvyaf
素直にWinFormsで入門すればよかったのにw
C#に限らず今時のプログラミング言語自体、まったくの初心者にとっては躓きそうな要素が
色々あるのに、xamlがーとかMVVMがーとか言い出したら、地雷原を素足で歩くようなもの
2017/11/07(火) 16:42:34.80ID:9jjlIy9p
>>674
ConsoleでHello,world からでしょ。
2017/11/07(火) 16:56:18.48ID:kORl+ylV
ほんとそれな
Viewの前にModelの作り方、GUIの前にCUIの作り方覚えろと
2017/11/07(火) 17:39:21.94ID:H3DL339H
今時CUIはないでしょう。
モチベーションが続かないし、Windows FormでポトペタでGUI作るより
CUIの方が簡単とも思えない
2017/11/07(火) 18:04:12.00ID:kORl+ylV
>Windows FormでポトペタでGUI作るより
いきなりそれからやろうとすると、基礎が身に付かんだろって話なのよ
言語の基本仕様くらい真面目に学習せんかーい
2017/11/07(火) 18:06:52.09ID:H3DL339H
>>678
じゃあ聞くけど、CUIを選択することで学習できる基礎って何?
そんなものはないよ。あるなら言ってみ?

そういう話なら、たぶん構造化プログラミングをすっ飛ばしていきなり
クラスベースのOOPに挑戦する弊害の方が大きいと思う
2017/11/07(火) 18:45:12.03ID:MJK6I9RA
CUIは入出力がものすごく単純でGUIみたいなフレームワークの知識がほぼいらないので言語の仕組みそのものに学習を集中できる
2017/11/07(火) 19:06:46.18ID:vb3e1pou
>>679
MVVMのModelで実行できるプログラムにGUIって必要か?
2017/11/07(火) 19:09:33.93ID:vb3e1pou
ぶっちゃけ、GUIやConsoleプログラムのI/Oって泥臭い処理で
プログラムの本質を学ぶ上では必要の無いものなのかもね。
2017/11/07(火) 19:15:19.61ID:vb3e1pou
とりえあず、かずき大先生の記事を貼っておく。
日本語のWeb情報でWPFに関してこれを超えるものはないと断言できる。
http://blog.okazuki.jp/entry/2014/12/27/200015

お布施、払いたい人はこれ
https://www.amazon.co.jp/gp/product/B015WXYUUU/ref=oh_aui_d_detailpage_o01_?ie=UTF8&;psc=1

これも必須
https://www.amazon.co.jp/%E3%82%A8%E3%83%83%E3%82%BB%E3%83%B3%E3%82%B7%E3%83%A3%E3%83%ABWPF-Presentation-Foundation-Programmers-SELECTION/dp/4798114200/
2017/11/07(火) 19:33:09.38ID:6NdbJPOz
>>680
curses全力否定?
2017/11/07(火) 19:38:51.28ID:MJK6I9RA
>>684
cursesみたいに複雑にしようと思えばいくらでもできるけど、printfとscanfだけでも最低限のものは作れるでしょ
GUIだとその最低限のものを作るのにも書かなきゃいけないことが多くて初心者向きじゃない
2017/11/07(火) 19:41:29.82ID:o4Vl0zCf
ボタン押してラベル書き換えるぐらいもやる気がないなら
プログラムやる資格はないと思う
2017/11/07(火) 20:40:45.13ID:JobEFelh
>>ボタン押してラベル書き換えるぐらい
のことでもViewのコードビハインドにするかViewModelとの相互作用にするかでも悩まされるのがWPF

ViewModelとの相互作用で書いた方が可搬性があがるよ!
…分かるけど、それ、初心者向きかしら?そんなことも思わすのがWPF
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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