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/
0689デフォルトの名無しさん
垢版 |
2017/11/07(火) 22:12:40.66ID:jxgrvyaf
>GUIだとその最低限のものを作るのにも書かなきゃいけないことが多くて初心者向きじゃない
という程にはWinFormは難解じゃないわな。その辺りは良くも悪くもVisual Basic譲り
ただ、GUIから入るとFormの存在感が強すぎて、ブラックボックス的な部分もあって、クラス
などの基礎知識の理解を遅らせかねない部分があるのは確か
とはいえ、今のご時勢CUIでストイックにプログラミング勉強しようとも人に勧めようとも
思わないけどな
ボール無しでの基礎訓練も大事だけど、やっぱシュート練習のほうが楽しいわさ
0690デフォルトの名無しさん
垢版 |
2017/11/07(火) 22:53:53.14ID:JobEFelh
>>688
>ボタンのラベルを他から参照する事が無い、次の画面に持ち越さずその場限りの使い捨てで良いならコードビハインド
そう。悩まないんだ!すごいねー。それで可搬性のあるコードになるんだー(棒
みんなそうなるといいねー。すてきー(呆
0692デフォルトの名無しさん
垢版 |
2017/11/08(水) 00:24:21.64ID:lkyynzxx
けっきょく低能よばわりされるんだ、悪じゃないのに。へー(もはや何もなし
0693デフォルトの名無しさん
垢版 |
2017/11/08(水) 02:10:41.66ID:41vAKyEh
かずきは大したことないよ。ただブログこまめに発信してるだけ。
neueccみたいな何か作り出せるのが最強
0695デフォルトの名無しさん
垢版 |
2017/11/08(水) 07:32:05.97ID:kXOcEBHO
>>693
まともなドキュメント書かなきゃ誰も使ってくれないけどね。
Rubyが流行ったのは早い段階で英語のドキュメントがあったから。

オレ、ドキュメントなんて面倒くさくて書きたくないけどw
0696デフォルトの名無しさん
垢版 |
2017/11/08(水) 11:04:01.06ID:yrPiJxO6
WPF使えるようになれば分かると思うが、理解できないのはWPFが糞設計だから。
決してPGのスキルの問題ではない。もしPGのスキルのせいにしてる奴がいるとすれば、
そいつはWPFを理解していないだけ。
0697デフォルトの名無しさん
垢版 |
2017/11/08(水) 11:47:39.60ID:kVbA0K8n
コードビハインドとか新しい用語作っておきつつ学習した後で
それは柔軟性が足りないとか言われても困る
0698デフォルトの名無しさん
垢版 |
2017/11/08(水) 12:21:09.00ID:OSwmw0Ws
>>696
どんな糞でも食せるように調理できるのはスキルではないと言うのか。
オレはスカトロマニアかw
0699デフォルトの名無しさん
垢版 |
2017/11/08(水) 12:29:17.17ID:JZhqf68Z
ウメーとこだけバインド利用しましょうでええんや
キッチリカッチリ無理無理。ハゲるぞ
0700デフォルトの名無しさん
垢版 |
2017/11/09(木) 05:49:47.74ID:gZdnar30
WPFが糞というのはないな、xamlが糞だというのはおおむねそうだな
xmlもどきで記述されたものを専用パーサで読みUIを作るという着想はいいんだ
問題は書式、カッコ増えすぎインデント深すぎ、可読性が悪いし記述がしにくい
0701デフォルトの名無しさん
垢版 |
2017/11/09(木) 07:52:05.77ID:rakEZX+F
フラットだったら可読性が良いってわけでもないと思うがな。
少なくとも、デザイナー使わないと読んでも理解できない.Designer.csよりはマシになったと思う。
xamlでネストが深くなりすぎたと思ったら<UserControl>でモジュール分割するタイミングだな。
main()関数の中に全部の処理を記述するようなことしてるから糞に思えるんだよ。
0702デフォルトの名無しさん
垢版 |
2017/11/09(木) 08:52:12.22ID:eH9JjwU7
xmlの問題なのは重々承知だが、コメントの書き方何とかならんものだろうか
0704デフォルトの名無しさん
垢版 |
2017/11/10(金) 16:44:08.42ID:0bOJZQsY
なんとかバインドの雰囲気がわかったと思ったらコマンドってなんだよ
これ1番わからねぇわ
0705デフォルトの名無しさん
垢版 |
2017/11/10(金) 17:50:48.32ID:ueWlL2hQ
WPFの本質が見えているとなぜ普及しなかいなんて一目瞭然なんだが、
それをPGのスキルのせいにするのは基本的にWPFの本質、使い方が何も分かってないのだろう。
0706デフォルトの名無しさん
垢版 |
2017/11/10(金) 18:37:03.92ID:KVSswJaS
WPF以外でスタイリッシュなUIって作れるのありますか?
WinFormじゃメチャクチャ工数がかかるのでWPF以外で何かいいのあったら教えて頂きたいです。
0709デフォルトの名無しさん
垢版 |
2017/11/10(金) 18:59:42.16ID:Bl01hNnl
wpf難しい…
データバインドがうまくいかない
データベースから取ってきたリスト型のデータをコンボボックスのitemsourceに設定するだけなのにうまくいかぬ
0711デフォルトの名無しさん
垢版 |
2017/11/10(金) 19:40:41.74ID:alfIXjUy
>>705
>それをPGのスキルのせいにするのは
PGのスキルのせいだと思うぞ。
MSが日本の平均的スキル(日本のITは奴隷産業なので世界の底辺以下のそのまた以下の以下のゴミクズ以下)を超えた物を作ってしまったのでついて行けてないだけ。
0712デフォルトの名無しさん
垢版 |
2017/11/10(金) 19:46:17.42ID:Qc9ud9aj
WPF開発は個別の画面の前に全体の仕組みの設計から入らないと上手くいかないというかクソ手間かかるんだよな
日本人はそういうの苦手でボトムアップが好きだから根本的に合わないんだよ
0713デフォルトの名無しさん
垢版 |
2017/11/10(金) 20:39:39.13ID:g/THXaNi
まぁ確かに、Formsだとポトペタで画面作ってダブルクリックで開いたイベントハンドラに
ちょいちょいとコードを書けばそれで動くものができたからな。そのお手軽さは素晴らしい。
0715デフォルトの名無しさん
垢版 |
2017/11/10(金) 21:41:54.84ID:jdLju/Su
htmlの手書きが出来るならxamlなんて言うほど大変じゃないんだけどな
swingのレイアウトよりは遥かにマシだと思うし
0717デフォルトの名無しさん
垢版 |
2017/11/10(金) 22:17:07.28ID:O9mK3j04
うっかり<i:Interaction.Triggers>書いちまった、もう戻ってこれないかもしれない、すまぬ
0718デフォルトの名無しさん
垢版 |
2017/11/10(金) 22:48:28.78ID:jdLju/Su
すっかり忘れてたが、CommandってprismとかReactiveCommand使わんと無茶苦茶面倒だったな
prism使えば大したものじゃねーよ
0719デフォルトの名無しさん
垢版 |
2017/11/10(金) 22:51:00.68ID:z3kyf/Nq
>>709
リストはListではなく、ObservableCollection使ってるか?

リストはプロパティになってるか?
フィールドだとバインドされないぞ

リストのインスタンスをバインドした後に書き替えてないか?
0720デフォルトの名無しさん
垢版 |
2017/11/10(金) 23:09:12.76ID:TSxiC3iy
コマンドは許すがビヘイビアは最悪
あの頃の「コードビハインドは殺せ」な宗教化したMVVMのせいでWPFが避けられるようになったんだと思うわ
0721デフォルトの名無しさん
垢版 |
2017/11/10(金) 23:25:01.08ID:jdLju/Su
uwpからイベントをバインド出来るようになったから、ビヘイビアは殆ど書かなくても何とか成るようになった
0722デフォルトの名無しさん
垢版 |
2017/11/11(土) 02:00:39.82ID:ZPU8Qj6m
>>720
ビヘイビアやトリガーは1度作ってしまえば、既存のコントロールにポトペタで機能を追加出来て面白いけど、
使いまわししないならいちいち作るのは面倒なだけだね。
0726デフォルトの名無しさん
垢版 |
2017/11/11(土) 20:00:52.76ID:kwXAGkCp
ビヘイビアって依存関係プロバティーが仰々しいだけで、中身は大したことやってないから難しいものでもないんだけどね
警戒せずにコード読めば簡単に理解できるから
0727デフォルトの名無しさん
垢版 |
2017/11/11(土) 20:12:23.29ID:7DvP3YTX
ビヘイビアの問題はビューとロジックの分離を壊すこと
Libet信者なんか当時はXAMLでプログラミングしてドヤ顔してるような状態で本当に酷かった
0728デフォルトの名無しさん
垢版 |
2017/11/11(土) 20:32:22.35ID:WEOLmGSE
>ビヘイビアの問題はビューとロジックの分離を壊すこと

ビューにロジックが存在しちゃいかんって法はないだろ。
ビジネスロジックを置くべきじゃないって話と混同してるんじゃないか?
0729デフォルトの名無しさん
垢版 |
2017/11/11(土) 21:41:38.21ID:7DvP3YTX
ビューとロジックの分離というのは文脈によって様々なものを指すが、
WPFの根幹の思想としてのビューとロジックの分離は、「見た目はXAMLで定義し、振る舞いはコードで定義する」ってことだ。
それを破ってXAMLで振る舞いを定義しようとしたのがビヘイビア。
強力すぎる設定ファイルを与えると人は次第にそれで複雑なプログラミングをするようになるもので、
設定ファイルとして分けた意味がなくなってしまうんだよ。
ダイアログ出すくらいいいだろと思う人もいるかも知れないが、それを認め始めると歯止めが効かなくなるの。
0730デフォルトの名無しさん
垢版 |
2017/11/11(土) 22:15:20.74ID:WEOLmGSE
>WPFの根幹の思想としてのビューとロジックの分離は、「見た目はXAMLで定義し、振る舞いはコードで定義する」ってことだ。

XAMLのみがビューだと言っているのか?
ビヘイビアのコードはビューじゃないとしたら何だと?
0732デフォルトの名無しさん
垢版 |
2017/11/11(土) 23:54:31.21ID:7DvP3YTX
>>730
ビューとロジックというのは相対的なもので、具体的に何を指すかは場合によって違う
WPFはもともと、デザイナーがデザインを作ってプログラマがコードビハインドを書くことで分業するように設計されている
プログラマ目線のビューとロジックの分離はもう一段上がるわけだが、それはWPFとは直接関係のない話だ
0734デフォルトの名無しさん
垢版 |
2017/11/12(日) 07:43:01.13ID:/VKzDrV0
ビューとモデルの分離
プレゼンテーション(ビュー)ロジックとビジネスロジックの分離
デザインとロジックの分離

このあたりの勘違いだろうと突っ込んでみたら、説明がどんどん意味不明になって笑える
0735デフォルトの名無しさん
垢版 |
2017/11/12(日) 08:26:06.14ID:e5xLDhIK
WPF = MVVM だと思ってると敷居が高いがWinFormに代わる綺麗な
UIの作れるライブラリだと思って使えば敷居がかなり下がる。

コードビハインドとバインドしてイベントベタ書きでも何も問題無いんだよ。
MVVMなんて高尚なものは後でも良いのだ。
0739デフォルトの名無しさん
垢版 |
2017/11/12(日) 10:09:18.93ID:e5xLDhIK
>>738
xamlにMVVM, Entity Framework, prismのようなライブラリ
初心者がフルコースで全部やろうとすると玉砕するのは当たり前。

先ずは、xamlとbindingだけ理解できれば十分だと思う。
0740デフォルトの名無しさん
垢版 |
2017/11/12(日) 10:41:52.59ID:a3dJlCt1
ビヘイビア使わないでフルードアニメーション書くならどこに書くんだ?
Vしかないだろ
ビヘイビア自体は適切だろ
0742デフォルトの名無しさん
垢版 |
2017/11/12(日) 16:56:10.96ID:txKtgk4R
だから、ビューが最小限のコンソールアプリを書いて、それにビューをつけるようにしておけば、モデルロジックとビューロジックの境目がわからみえるようになってくるよ
0743デフォルトの名無しさん
垢版 |
2017/11/13(月) 09:20:12.41ID:yQMeQSTi
xamlをWinFormに置き換えても、そのまんま動くのがModelだけど。
だったら、このスレと関係ないがな〜になる。
0744デフォルトの名無しさん
垢版 |
2017/11/13(月) 13:44:23.68ID:l5U7Am7V
ViewModelとModelをdllにしても問題なくビルド&実行できるなら
それはちゃんと責務の分離が出来ている
0746デフォルトの名無しさん
垢版 |
2017/11/13(月) 20:19:43.72ID:kVXhdF1X
UI変更したらViewModelは影響受けるけどModelは一切影響受けない(ようにつくる)だけだろ
0747デフォルトの名無しさん
垢版 |
2017/11/13(月) 20:46:28.57ID:WAV6Z8eL
アプリを作れて動いて、それで誰も困ることがなければどうやって作っててもいいと思う。
メンテしないような使い捨てアプリにMVVMで作るコストかけても仕方ないし、メンテナンスや機能拡張するアプリを、ちゃんと設計せずに作るのはヤバイ。

適材適所
0749デフォルトの名無しさん
垢版 |
2017/11/13(月) 23:37:32.63ID:WcCek0Ug
prismを見ると、MVVM以外にDIコンテナだったりナビゲーションサービスだったり画面遷移型のフレームワークってのももう一つの柱なのがわかる
WpfのゴールとしてMVVMだけじゃなくて、従来のWindowを次々開くタイプのアプリからWebのような一つのWindowで画面が遷移するタイプへの移行ってのも在るのかもしれんね
実際Windowをやたらと開かないタイプの方が遥かに使いやすい
0750デフォルトの名無しさん
垢版 |
2017/11/13(月) 23:45:47.26ID:1k/7dsAB
>>748
馬鹿でも沢山覚えられるぞ。
但し、カンナで釘を打ちハンマーで釘を抜くなんて使い方をするだけさ。
0751デフォルトの名無しさん
垢版 |
2017/11/14(火) 00:38:06.83ID:04qZtOw+
>>749
いや業務アプリってメインフレームの時代から画面遷移型が基本だぞ
だからWebでいいんじゃねとなる
仕事したことないならPrismの画面遷移型アプリみたいなのは新鮮に感じるのかな
0752デフォルトの名無しさん
垢版 |
2017/11/14(火) 02:03:30.52ID:sCopJL4R
>>719
ありがとう、今日試してみたらうまくバインドできたよ
自己流であまり綺麗じゃないかもしれないが
ただ、今度は画面のレイアウトがうまくいかない…
canvas使ってペタペタやれば出来るのかもしれないが、せっかくだからもっとうまくいくやり方でやってみる
0764デフォルトの名無しさん
垢版 |
2017/11/14(火) 19:44:59.16ID:sSxxq2Sz
ちょまど神は、可愛くて漫画がプロ並みでプログラミングも出来るがオタクだな。
中川しよう子と同じ香りがする
0765デフォルトの名無しさん
垢版 |
2017/11/14(火) 20:53:34.28ID:31nONYO+
>>764
いつも思うけど、公人でもプライバシー売ってる芸能人でもない一般人に粘着する奴って
ストーカーと同じ。気色悪いわ。他人の前に自分自身をよく見てみろ。

自分で自分をおかしいと思わないなら、あんた人間として壊れてるよマジで。
言っても無駄だと思うけど。
0767デフォルトの名無しさん
垢版 |
2017/11/14(火) 21:47:48.12ID:Dc+h7CRO
>>759
> 暗記は馬鹿文系の得意技。おまえもそっち系だな。
プログラミングで暗記とか言う奴の方が馬鹿文系っぽいが w
0768デフォルトの名無しさん
垢版 |
2017/11/14(火) 22:09:21.65ID:FOR7JOrW
馬鹿にしていた文系に負けたとか、
嫌な思い出でもあるのでしょう
触れなさんな
0769デフォルトの名無しさん
垢版 |
2017/11/15(水) 03:49:16.30ID:PBDUFr1U
xamarinで調べごとするとチンポ騎士団が嫌でも目にはいるのが厄介
0771デフォルトの名無しさん
垢版 |
2017/11/15(水) 13:12:12.68ID:qga1lTtf
覚えらないからWPF使えないと思っている馬鹿がいるようだが、
単にWPFは使い物にならないから使われてない。WPFを理解すれば分かること。

ゴミすぎてもう消えることは決定している。
0772デフォルトの名無しさん
垢版 |
2017/11/15(水) 13:32:09.19ID:nmEsB5Z0
問題ないとは言わんが、回避できない問題山積ってわけでもないだろ
どうせ口だけで具体的に何も指摘できないんだろうねw
0774デフォルトの名無しさん
垢版 |
2017/11/15(水) 21:07:44.79ID:wdJ6Ok7d
データバインドがようやく分かってきた
これがあると飛躍的に出来ることが拡がるな
0776デフォルトの名無しさん
垢版 |
2017/11/16(木) 17:08:22.10ID:PzwxtFUT
下記コードは選択中にツールチップが表示されますが、
選択された後にコンボボックス上でツールチップを表示させることは可能でしょうか?
以上よろしくお願いいたします。


<Grid>
<StackPanel>

<ComboBox Width="100">
<ComboBoxItem ToolTip="This it tool tip for item 1">This it tool tip for item 1</ComboBoxItem>
<ComboBoxItem ToolTip="This it tool tip for item 2">This it tool tip for item 2</ComboBoxItem>
</ComboBox>

</StackPanel>

</Grid>
0777デフォルトの名無しさん
垢版 |
2017/11/16(木) 18:20:42.66ID:x/aWQ3sN
>>776
<Grid>
<StackPanel>

<ComboBox
x:Name="ComboBox1"
Width="100"
ToolTip="{Binding SelectedItem.ToolTip, ElementName=ComboBox1}">
<ComboBoxItem Content="This it tool tip for item 1" ToolTip="This it tool tip for item 1" />
<ComboBoxItem Content="This it tool tip for item 2" ToolTip="This it tool tip for item 2" />
</ComboBox>

</StackPanel>
</Grid>
0778デフォルトの名無しさん
垢版 |
2017/11/16(木) 18:59:08.25ID:PzwxtFUT
>>777

ありがとうございます!意外とシンプルでした。。。
0779デフォルトの名無しさん
垢版 |
2017/11/19(日) 23:30:40.15ID:DGB0My1S
>>751
当然GUIではないが、SASは実現してたね。
しかもWin3.1が出てきた時代には、
メインフレームのマルチウインドウプログラム<=>Win3.1のGUIで
互換性を保っていた。
他のソフトでは見たことないけど。
0780デフォルトの名無しさん
垢版 |
2017/11/20(月) 18:20:06.51ID:xUHYIzKM
MVVMの勉強を行なっているのですがコマンドってどう扱えば良いでしょうか
元々プログラミング自体勉強し始めたばかりなので初歩的な部分で理解できていない部分もあるとは思いますがサンプルを見てもどれも違った作り方をしてて動きも全くイメージが掴めません…
あるボタンを
command ={Binding testbutton}
とした場合、ボタンを押した状態はtrueやfalseも入っておらずどのように処理を記述すれば良いのか分かりません…

例えばボタンを押したらメッセージボックスを出すだけの単純な物を作ろうとした時に
コマンドを使わずクリックイベントで処理するなら

-viewmodel-
private void button(object sender , RoutedEventArgs e)
{
model.test();
}

-model-
public void test()
{
MessageBox.Show(Test);
}


これをコマンドに置き換えるとどういう形になるのでしょうか?
答えにくい質問で申し訳ありませんがよろしくお願い致します
0782デフォルトの名無しさん
垢版 |
2017/11/20(月) 20:19:45.47ID:Q9UPjx7d
一番かんたんなのはICommadを実装したクラスを用意する
だがコマンド毎にクラスとか毎回手間すぎて禿げるので
DelegateCommandやRelayCommandを作るか作ってあるものを利用する
これはMVVMフレームワークごとに呼び方が違うだけでやりたいことは一緒
https://ideone.com/D0rrm7
0783デフォルトの名無しさん
垢版 |
2017/11/20(月) 20:55:31.92ID:f1XDtXet
コマンドを使うとコードをVに書かないで済む

ただ…
イベントと比べると
コマンドは送れる情報量が少ない
コントロールに目的の動作に対応したCommandプロパティがあるとは限らない
VMがとっちらかる可能性がある
0784デフォルトの名無しさん
垢版 |
2017/11/20(月) 21:54:47.51ID:uTaWa3cA
いまさらWPF勉強はじめたけど凡人には敷居たかいわ;;
いや年とったせいかな、いつもどおりデバッグしてF5、デバッグしてF5とえんえんとやって覚えていくんだが
おれ何十年おなじことやっとんねん、と考えると何とも以遠気分になる

でもたのちい
0786デフォルトの名無しさん
垢版 |
2017/11/20(月) 23:01:16.33ID:xUHYIzKM
>>782
わざわざ作って頂いて本当にありがとうございます
質問なのですが
class ViewModel
{
FooModel fooModel = new FooModel();

public ICommand testbutton { get; set; }

public ViewModel()
{
testbutton = new TestButtonCommand { model = fooModel };
}
}
以下の行はどういう意味なのでしょうか?
testbutton = new TestButtonCommand { model = fooModel };

また
class TestButtonCommand : ICommand
{
public event EventHandler CanExecuteChanged;

public bool CanExecute(object parameter) => true; // ←ここをfalseにするとボタン押せないのを確認する

public void Execute(object parameter)
{
model.test();
}

ボタンを押した際に特に何も指定していない以下の部分がボタンの状態を確認しているのでしょうか?
自分の頭が悪過ぎるのもありますがやっぱり難しいです…
public bool CanExecute(object parameter) => true
0787デフォルトの名無しさん
垢版 |
2017/11/21(火) 00:15:42.31ID:D1w1iQjW
>>786
ボタンはコマンドのCanExecuteの戻り値を見てボタンの実行の可否を判断してる
当然ながら状態変わったと通知しないと変更されても気づかない

というか普通にググって順番に見て言って ” 勉強 ”してからわからないことを聞いたほうがいいよ


入門者の数だけみんなレスしないといけない
ここはそんな場所じゃない
■ このスレッドは過去ログ倉庫に格納されています