X



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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
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/
0591デフォルトの名無しさん
垢版 |
2017/10/10(火) 19:40:17.75ID:e0oQHeX4
>>585
vb6の業務システムを泣きながらWindows10対応している俺の立場は。
なーんもしなくてもそのまま問題なく動いてるっぽい(ーー;)
0592デフォルトの名無しさん
垢版 |
2017/10/10(火) 20:02:50.32ID:kFuua7X2
VB6はドトネトより明らかに早いから、しっかり作ってあるとWinFormsなど見た目で差別化が出来ない場合辛いものが有るね
まあメンテするこっちからみたらクソ言語では有るが
0593デフォルトの名無しさん
垢版 |
2017/10/10(火) 20:16:48.02ID:e0oQHeX4
アプリケーションは速ければ速いほど良い。
vb6ってこんなに軽かったっけって思うよ。
でもこんな仕事はいやズラ(T_T)
0596デフォルトの名無しさん
垢版 |
2017/10/10(火) 21:03:53.95ID:MPxouh5p
いくらメモリーリークしなくても日が暮れる前に仕事を終えてくれないとなー
0597デフォルトの名無しさん
垢版 |
2017/10/10(火) 23:05:52.56ID:2hrMSkCE
gdi++の初期化/終了なんぞ頻繁に呼び出すことはないからどうでもええけど
それより原因となるTSFのリーク発生条件がやべえな
ダミーウィンドウと共にスレッド起こすのは小細工としてそこそこ出番があるような
0598デフォルトの名無しさん
垢版 |
2017/10/10(火) 23:15:47.61ID:TI1DggQu
>>597
思いっきり当てはまる作りをしているアプリがあるわ。
生成頻度は少ないからまぁ大丈夫だろうけども。
0602デフォルトの名無しさん
垢版 |
2017/10/11(水) 10:44:22.63ID:9HbYpl43
今アフリカでは飢えた子供たくさんいます。皆さんの寄付をお待ちしております。
0605デフォルトの名無しさん
垢版 |
2017/10/11(水) 14:15:19.34ID:xGB2zgmM
>>599
ぼっても割に合わん。
動作不良じゃなく元々のバグがかなりあるOrz
当時のブビプログラマーのレベルはこんなもんだがw
0609デフォルトの名無しさん
垢版 |
2017/10/11(水) 19:44:00.46ID:2kA0LIge
mvvmやxaml,データーバインディングは作りたいアプリがあったので作りながら覚えれたけど、次のステップとしてリアクティブプログラミングやろうとしたがリアクティブはかなり敷居高そうだな
0610デフォルトの名無しさん
垢版 |
2017/10/11(水) 19:45:55.55ID:CGuaZ+CK
WinFormsでカスタムコントロール作ってオーナードローした人じゃないと
wpfの有り難みは理解できんかもな
そりゃコントロール並べるだけならwinfromsのほうが遥かに簡単だ
0612デフォルトの名無しさん
垢版 |
2017/10/11(水) 19:55:42.90ID:ff6iD1XD
なんでコントロール並べるだけのことが後発のWPFでは難しいんだろうな

WinFormsでできることがXAMLを一切触らずにがUIデザイナでできたら、
結果は違ったんだろうか?
0613デフォルトの名無しさん
垢版 |
2017/10/11(水) 20:14:17.44ID:wRfMxQMF
>>609
ReactiveProperty/ReactiveCommandの話なら、すごく楽だよ。
逆に今までの苦労は何だったのかと思うほど。
0614デフォルトの名無しさん
垢版 |
2017/10/11(水) 20:26:19.51ID:CGuaZ+CK
uwpでReactiveCommand使う時、disposeのタイミングで例外吐く不具合があってエライ目に有ったんだが
アレは治ったんだろうか?
0615デフォルトの名無しさん
垢版 |
2017/10/11(水) 21:11:58.60ID:/ydphcqk
遅いらしいし、コントロール揃ってないし、なんかめんどくさそうだし、将来WPFが
主流になるんだったら覚えてもいいけど、まあもうちょっと枯れてからでいいやと
思い続けてとうとう今日に至る
0617デフォルトの名無しさん
垢版 |
2017/10/11(水) 22:29:17.19ID:Qsqjym7k
winfromやwindows7で困ってない人を移行させるのは難しい。
それ以前に移行すると困る人が大勢いるのはMSの怠慢と言わざるをえない。
0618デフォルトの名無しさん
垢版 |
2017/10/12(木) 10:14:35.23ID:EMta15tJ
アスペのすきなC#
0622デフォルトの名無しさん
垢版 |
2017/10/12(木) 12:46:50.56ID:iASiM5mX
アスペが釣れる
0624デフォルトの名無しさん
垢版 |
2017/10/15(日) 10:50:00.14ID:fX+zjWfL
>>613
それは、ある程度使えるようになってからだろ?
その前段階の覚える段階の敷居が(目標がないと)高いって意味じゃね?
0631デフォルトの名無しさん
垢版 |
2017/11/02(木) 10:14:35.62ID:39jE09AN
個人開発の規模だと、ビューとモデルを分割する事のメリットからしてあまり感じられないだろうから無理も無い
0632デフォルトの名無しさん
垢版 |
2017/11/02(木) 10:18:50.35ID:NmY3JO0d
VとVMの切り分けはよく分かるんだけど
VMとMの切り分けがよく分からないんだよね

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

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

VisualStateManagerは確かに難しい
つか使いこなせん
Styleのカスタマイズは未だに試行錯誤というか行き当たりばったりだわ
0655デフォルトの名無しさん
垢版 |
2017/11/06(月) 13:12:40.27ID:TOtQu/eL
>>653
んー…分からん…
色んなサイト見ても全部微妙に違ってどれを参考にしたら良いかもわからん
MVVMだとどの部分に書くんだ?
0656デフォルトの名無しさん
垢版 |
2017/11/06(月) 13:38:43.96ID:3xHBnL7y
んー…なんというか…。書くとか書かないとかというか、、データソースなんだよ
0657デフォルトの名無しさん
垢版 |
2017/11/06(月) 13:55:11.78ID:2nM3KO37
>>655
Contextって名前が曖昧すぎる。
DataHogeと同じで名前に意味はない。
DataContextにはViewModelのインスタンスを設定してDataCintext=ViewModelだと思ってればよいのだ。
0658デフォルトの名無しさん
垢版 |
2017/11/06(月) 18:15:34.67ID:6TjQQ+65
>>648
難しいのは考え方だろうね
データコンテキストが難しいと感じるなら、根本的に発想の転換が必要なんだと思う
0661デフォルトの名無しさん
垢版 |
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から取得したらいいの?
プロパティとか使うの?
0662デフォルトの名無しさん
垢版 |
2017/11/06(月) 23:48:48.36ID:VYb2y8+k
>>661
それは Xamlには Binding だけでいい
0663デフォルトの名無しさん
垢版 |
2017/11/06(月) 23:51:37.56ID:VYb2y8+k
知識ないうちはXamlは地獄

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

DataContextを設定してはじめてSouceとTargetは赤い糸で結ばれる
0665デフォルトの名無しさん
垢版 |
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="は省略可)
0666デフォルトの名無しさん
垢版 |
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とか取ってきたりする
0667デフォルトの名無しさん
垢版 |
2017/11/07(火) 06:48:36.59ID:QsHhWiO1
>>661
ビューモデルとデータコンテキストの紐付けはxamlの中に記述する。
xamlはhtml見たいな画面記述言語じゃなくてc#(.net)のインスタンスを記述する言語。
0669デフォルトの名無しさん
垢版 |
2017/11/07(火) 09:12:12.63ID:lDMoKAlX
>>667
>xamlはhtml見たいな画面記述言語じゃなくてc#(.net)のインスタンスを記述する言語。
それXAML一般じゃなくてWPF限定だから気をつけた方がいいよ
UWPやSilverlightでは.NETオブジェクトはアンマネージドなXAML DOMのラッパー
だからC#でツリー組むよりXAMLをテキストで読ませたほうが速かったりする
0674デフォルトの名無しさん
垢版 |
2017/11/07(火) 12:39:39.96ID:jxgrvyaf
素直にWinFormsで入門すればよかったのにw
C#に限らず今時のプログラミング言語自体、まったくの初心者にとっては躓きそうな要素が
色々あるのに、xamlがーとかMVVMがーとか言い出したら、地雷原を素足で歩くようなもの
0677デフォルトの名無しさん
垢版 |
2017/11/07(火) 17:39:21.94ID:H3DL339H
今時CUIはないでしょう。
モチベーションが続かないし、Windows FormでポトペタでGUI作るより
CUIの方が簡単とも思えない
0678デフォルトの名無しさん
垢版 |
2017/11/07(火) 18:04:12.00ID:kORl+ylV
>Windows FormでポトペタでGUI作るより
いきなりそれからやろうとすると、基礎が身に付かんだろって話なのよ
言語の基本仕様くらい真面目に学習せんかーい
0679デフォルトの名無しさん
垢版 |
2017/11/07(火) 18:06:52.09ID:H3DL339H
>>678
じゃあ聞くけど、CUIを選択することで学習できる基礎って何?
そんなものはないよ。あるなら言ってみ?

そういう話なら、たぶん構造化プログラミングをすっ飛ばしていきなり
クラスベースのOOPに挑戦する弊害の方が大きいと思う
0680デフォルトの名無しさん
垢版 |
2017/11/07(火) 18:45:12.03ID:MJK6I9RA
CUIは入出力がものすごく単純でGUIみたいなフレームワークの知識がほぼいらないので言語の仕組みそのものに学習を集中できる
0682デフォルトの名無しさん
垢版 |
2017/11/07(火) 19:09:33.93ID:vb3e1pou
ぶっちゃけ、GUIやConsoleプログラムのI/Oって泥臭い処理で
プログラムの本質を学ぶ上では必要の無いものなのかもね。
0683デフォルトの名無しさん
垢版 |
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/
0685デフォルトの名無しさん
垢版 |
2017/11/07(火) 19:38:51.28ID:MJK6I9RA
>>684
cursesみたいに複雑にしようと思えばいくらでもできるけど、printfとscanfだけでも最低限のものは作れるでしょ
GUIだとその最低限のものを作るのにも書かなきゃいけないことが多くて初心者向きじゃない
0686デフォルトの名無しさん
垢版 |
2017/11/07(火) 19:41:29.82ID:o4Vl0zCf
ボタン押してラベル書き換えるぐらいもやる気がないなら
プログラムやる資格はないと思う
0687デフォルトの名無しさん
垢版 |
2017/11/07(火) 20:40:45.13ID:JobEFelh
>>ボタン押してラベル書き換えるぐらい
のことでもViewのコードビハインドにするかViewModelとの相互作用にするかでも悩まされるのがWPF

ViewModelとの相互作用で書いた方が可搬性があがるよ!
…分かるけど、それ、初心者向きかしら?そんなことも思わすのがWPF
■ このスレッドは過去ログ倉庫に格納されています

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