WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part15at TECH
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part15 - 暇つぶし2ch2:デフォルトの名無しさん
13/02/03 12:53:14.57
Part13 スレリンク(tech板)
Part12 スレリンク(tech板)
Part11 スレリンク(tech板)
Part10 スレリンク(tech板)
Part9 スレリンク(tech板)
Part8 スレリンク(tech板)
Part7 スレリンク(tech板)
Part6 スレリンク(tech板)
Part5 スレリンク(tech板)
Part4 スレリンク(tech板)
Part3 スレリンク(tech板)
Part2 スレリンク(tech板)
Part1 スレリンク(tech板)

3:デフォルトの名無しさん
13/02/03 13:20:33.17


4:デフォルトの名無しさん
13/02/03 17:32:33.67
WPFでソケット通信を実行するときは、その手続きはどこに書くべきなんですかね?
MVVMだとDB接続はモデルに書くらしいんですが

今回はソケット通信でデータ受信するだけでなく、短い文言も送信しますし
相手方の応答に応じて、分岐とかあったりします

5:デフォルトの名無しさん
13/02/03 17:35:38.79
View:なるべく書かない。画面遷移くらい。
ViewModel:画面で完結する処理を書く
Model:他はすべてここ

6:デフォルトの名無しさん
13/02/03 17:36:05.49
VMに書け
以上

7:デフォルトの名無しさん
13/02/03 17:36:59.73
文言もモデル化できるとしてModelが妥当

8:デフォルトの名無しさん
13/02/03 17:38:53.02
メッセージパッシングとかまさにそんなんだろ

9:デフォルトの名無しさん
13/02/03 17:44:27.39
>>5
>>7
そうなんですか・・・
MVVMのモデルってでかいんですね

10:デフォルトの名無しさん
13/02/03 17:46:01.69
モデルをDBのレコードとしか考えない
理由が無い

11:デフォルトの名無しさん
13/02/03 17:48:01.60
画面と処理を分離させるのがポイント
画面がいくら変わっても表示させたいデータが変わらない限りはModelは何も変えなくて良いように設計する
だから、データの見せ方に関わる動きはViewModelに書く

12:デフォルトの名無しさん
13/02/03 17:54:21.04
なるほど

DBからDataTableを持ってくる処理はModelに書くとして、Viewではそれを行列反対にして表示する場合
その行列を組み替える処理はViewModelなんですかね?

13:デフォルトの名無しさん
13/02/03 17:59:30.74
そんな感じ

14:デフォルトの名無しさん
13/02/03 20:25:31.23
ありがとうございました。

15:13
13/02/03 20:39:31.97
言っとくけど、俺はWPFでアプリを作ったことがない

16:デフォルトの名無しさん
13/02/03 20:44:18.42
VS2012でx64のWPF開発してるんですが、未だにデザイナはx64に対応しないの?

17:デフォルトの名無しさん
13/02/03 20:49:38.62
語弊がありそうな書き込み発見

18:デフォルトの名無しさん
13/02/03 22:13:56.73
>>17
どれ?
WPFのプロの方、教えてください。

19:デフォルトの名無しさん
13/02/04 02:02:26.77
WPFは終了しました

20:デフォルトの名無しさん
13/02/04 11:45:00.27
Borderの中にコントロールを入れて、そのコントロールが水平・垂直に真ん中に配置されるプロパティーってないんですか?

なんかAndroidとかと比べて、コントロールに親子関係がないような

21:デフォルトの名無しさん
13/02/04 12:05:26.58
子要素のHorizontalAlignment/VerticalAlignment

22:デフォルトの名無しさん
13/02/04 12:16:18.22
3.5までしか触ってないんだけど、セパレータって縦置きできるようになった?

23:デフォルトの名無しさん
13/02/04 12:20:49.81
確認してないけどできない

24:デフォルトの名無しさん
13/02/04 12:25:53.09
>>21
それをやっても、ボーダーに対して真ん中にならず、恐らくGridに対して真ん中になるです

25:デフォルトの名無しさん
13/02/04 12:30:59.17
なんだか状況がおかしい気がする

26:デフォルトの名無しさん
13/02/04 12:32:53.26
ほっといても真ん中だし
gridに対して真ん中って表現もおかしい
だったらグリッドのマス目のコラムの幅変えてみて場所が変わるか?

27:デフォルトの名無しさん
13/02/04 12:35:56.28
Borderと子コントロールの話だったのにどっからGridが出てきたのか

28:24
13/02/04 12:36:00.01
すいません
勘違いしてました

全てのコントロールがGridに対して子になっていただけで、Border →StackPanel → 子コントロールと入れ子にしてから、
各子コントロールのプロパティーをいじらないといけなかったようです

ありがとうございました

29:デフォルトの名無しさん
13/02/04 12:37:58.18
ずこ

30:デフォルトの名無しさん
13/02/04 13:49:17.27
Settings.settingsってそのままModelとして使ってもいいんでしょうか
それともラップするクラスを作るべきでしょうか

31:デフォルトの名無しさん
13/02/04 16:59:46.78
別にそのままでいいよ

32:デフォルトの名無しさん
13/02/04 20:25:29.36
多角形のボタンってどうやって作るの?

33:デフォルトの名無しさん
13/02/04 21:02:17.36
wpf 丸いボタンで検索して丸を多角形に変えればいい

34:デフォルトの名無しさん
13/02/04 22:28:16.99
マルチスレッドって、Backgroudworkerあればあとは使わない感じ?

35:デフォルトの名無しさん
13/02/04 22:36:44.81
NotificationWindowってどうやって使えばいいかわかりますか?
AndroidのToastみたいなポップアップを出してみたいです

36:デフォルトの名無しさん
13/02/04 22:47:18.19
あんまBackgroundWorkerこそ使わなくなったな
専らTaskとDispatcher.Invokeで済ます

37:デフォルトの名無しさん
13/02/05 01:43:34.89
WPFでBackgroudworker使ったことないな

38:デフォルトの名無しさん
13/02/05 03:56:11.87
非同期とかRxしかねーだろ

39:デフォルトの名無しさん
13/02/05 09:48:21.82
WPFというより4.0ではいらない

40:デフォルトの名無しさん
13/02/05 11:37:18.10
Rxはオワコン

非同期はasync,awaitの方が使いやすいし、
リアクティブプログラミング支援ライブラリとしても使いにくい。

41:デフォルトの名無しさん
13/02/05 11:51:28.25
他におすすめのライブラリあるのか?

42:デフォルトの名無しさん
13/02/05 12:15:15.59
必ずライブラリを使わないといけない強迫観念にでも落ちいってんのか?

43:デフォルトの名無しさん
13/02/05 12:25:31.51
Rx自前とかアホか

44:デフォルトの名無しさん
13/02/05 12:28:38.60
今度はRx教ですか
MVVM教といいしなねーかな
殺したい

45:デフォルトの名無しさん
13/02/05 12:34:58.10
LINQ教もあるの?

46:デフォルトの名無しさん
13/02/05 12:36:47.30
たぶんあるね

47:デフォルトの名無しさん
13/02/05 12:51:24.27
C#はC/C++の代用としてがっつりデスクトッププログラム書きたい奴と
JavaScriptとかPHPとかの代用としてWEBアプリとか書きたい奴がいて
お互いに相容れなそう
設計思想とか全然違っちゃうしな

48:デフォルトの名無しさん
13/02/05 12:58:26.23
おいおい、MVVMは定義が曖昧すぎて理解不能で利便性の欠片も感じられないが、Rxは最高だろおい

49:デフォルトの名無しさん
13/02/05 13:44:35.72
.NET Framework内にReactiveって単語が含まれたらRx戦争終戦で
ViewModelって単語が含まれたらMVVM戦争終戦にしよう

50:デフォルトの名無しさん
13/02/05 13:53:45.42
LINQは別に宗教じゃなくてすでに言語の一部だろ
WPF用にプロパティ作るのもメソッド作るにも普通に使う
LINQなら一行でサクっと済むのが、
使わないと同じことするのに行数と文字数が何倍にもなるし。

51:デフォルトの名無しさん
13/02/05 14:41:42.02
EF教ならまだ分かるがLINQ持ち出すあたりにわかすぎw

52:デフォルトの名無しさん
13/02/05 14:55:29.80
>>40
リアクティブとして他に良いのが有るならぜひ教えてくれ。
RxとMVVMの組み合わせはすこぶる良い感じです(´・ω・`) 

53:デフォルトの名無しさん
13/02/05 15:15:26.94
まだLINQ敬遠してる土方もいるしな

54:デフォルトの名無しさん
13/02/05 15:17:52.70
なんで新しいこと覚えられないのにWPFやろうと思うんだろう

55:デフォルトの名無しさん
13/02/05 18:18:02.04
スレ違いは承知の上、ついでだから教えて欲しいんだがLINQをキチッと勉強するのにいい教材とか何かない?
上っ面程度のことは分かるんだけど、何ができて何ができないか、全体が把握できてない

用途は主にLINQ to Object

56:デフォルトの名無しさん
13/02/05 18:39:25.49
普通のSQL覚えればいいと思うよ
プログラミングやるなら何にでも使える必須知識

57:デフォルトの名無しさん
13/02/05 18:46:42.26
今時LINQ == クエリ構文って認識は古いってレベルじゃないと思うな

58:デフォルトの名無しさん
13/02/05 18:54:28.08
Rxとの組み合わせがいいって
ReactivePropertyのこと?

59:デフォルトの名無しさん
13/02/05 18:59:14.09
LINQはコレクションというかデータソースとでもいうのか
そういうのを簡潔に回すが全てじゃね?見つけるでもいいけど

60:デフォルトの名無しさん
13/02/05 19:18:34.01
簡単なもの(横1920のモニタでメソッド形式でなら1行で書ける程度レベル)ならメソッド形式がいい
でも複数のコレクションを結合させて混み入った条件つけて抽出したり、
メソッド式でも一行で収まらないくらい長くなる場合はクエリ式の方がいいよ

61:デフォルトの名無しさん
13/02/05 20:23:32.18
1920なら220文字は行けそうだ

62:デフォルトの名無しさん
13/02/05 20:55:40.93
Update2 CTPのBlendより前からでてたPreviewの方ができがいいな・・・

63:デフォルトの名無しさん
13/02/05 21:05:58.16
コードビハインドに書くのって画面遷移とコントロールの設定くらい?

64:デフォルトの名無しさん
13/02/05 21:20:58.36
ソケット通信の受信結果をListBoxで表示するプログラムを書いています。
受信時間の昇順に並べて、
スクロールが最下部にある場合に新しいデータを受信したら、
スクロールを一番下に移動して最新データを表示させたいと考えています。
これをやるにはListBoxのテンプレートをいじらないといけない感じでしょうか

65:デフォルトの名無しさん
13/02/05 21:50:25.58
>>64
なんかすげー似たようなアプリ作ってるな
俺もソケット通信の小さなアプリ、WPFで作っているわ

質問には答えられんがタイムリーなので

66:デフォルトの名無しさん
13/02/05 21:51:22.97
テンプレートまったく関係なくない

67:デフォルトの名無しさん
13/02/05 21:55:30.71
>>64
ListBox.ScrollIntoView じゃ駄目かい?

68:デフォルトの名無しさん
13/02/05 22:00:48.30
>>65
案外同じアプリ作ってるかもしれませんね

>>66
ListBoxのScrollViewerいじってるんですがどうもうまく機能しないんですよね
それでテンプレートいじったらなんとか実現できないかと思った次第です

69:デフォルトの名無しさん
13/02/05 22:18:20.72
>>67
常に下スクロールするのであればそれでよいと思います。
しかし、ユーザが上にスクロールしている場合には下スクロールさせたくないのです。
上のデータを見ているときにいきなり最下部にスクロールしてしまってはユーザが困惑してしまうと思うので。

まあ、素直に受信した降順に並べれば悩む必要ないんですが

70:デフォルトの名無しさん
13/02/05 22:35:04.58
スクロールが一番下にあるときだけScrollIntoViewするBehaviorでも書けばいいんじゃないですかね

71:デフォルトの名無しさん
13/02/05 22:37:04.52
そんな特殊な振る舞いをわざわざBehaviorにする意味は?
コードビハインドとなんも変わらんというか無駄に複雑になるだけ

72:デフォルトの名無しさん
13/02/05 22:49:49.55
FormにしろWPFにしろリストボックスは遅いんだよ
これはWindowsそのもののGUIがプアだからどうしようもない
OS X最強なんだなこれが

73:デフォルトの名無しさん
13/02/05 22:55:10.46
勝手にUITableViewDataSourceでも使ってろ

74:デフォルトの名無しさん
13/02/05 22:58:22.01
>>68
ScrollViewer がうまく機能しないっていうのは、どういう状況で何が機能しない?

75:デフォルトの名無しさん
13/02/05 23:09:30.49
>>58
ん、そんな感じの。
ReactveUIでも良いかもね

76:デフォルトの名無しさん
13/02/05 23:18:53.31
>>74
あまりうまく説明できないかもですが、
今はScrollViewerのScrollChangedが発生した時に、受信データ数が増えていて、スクロールバーの高さが以前のスクロールバーサイズ以上の値だった場合に最下部にスクロールするようにしているのですが、
これだと連続で複数のデータを受信した場合にきちんと最下部にスクロールしません。

77:デフォルトの名無しさん
13/02/05 23:24:15.78
LivetでVMからのMessenger.RaiseでBringIntoViewするものを即席で作ってみたけど
ListBoxのItemsPanelがVirtualizingStackPanelだから
VMがコントロールと結びついてないと反応しねぇ。

こういう場合どうするんだろう。

78:デフォルトの名無しさん
13/02/05 23:31:12.55
>>76
ListBox.UpdateLayout を使って強制的にレイアウトを再計算させるか、
Dispatcher.BeginInvoke(hoge, DispatcherPriority.Loaded) を使ってレイアウト計算後にスクロール処理を走らせてみては?
もしくは、ListBox.ItemContainerGenerator の StatusChanged イベントを待つとか。

最初の ScrollChanged が発生した段階では、後に受信したデータの ListBoxItem 要素が生成されてないのかも。

79:デフォルトの名無しさん
13/02/05 23:39:43.87
WPF初心者なんですが、ユーザーコントロール作る場合は、元々のユーザーコントロールを相対配置して作らないといけないんですかね?

80:デフォルトの名無しさん
13/02/05 23:39:59.14
XAMLからViewModelのメソッドってどうすれば呼べますか?
Click="ViewModel.Ok"とかでいけます?

81:デフォルトの名無しさん
13/02/05 23:41:58.33
いけません

82:デフォルトの名無しさん
13/02/05 23:42:10.28
>>78
即レスありがとうございます。
それだといけそうな気がしてきました。
改修長くなりそうなので結果報告は明日当りになると思います。

83:デフォルトの名無しさん
13/02/05 23:45:03.09
>>81
じゃどうするんですか?
わざわざコードビハインドにViewModelのメソッドを呼ぶメソッドを作る感じ?

84:デフォルトの名無しさん
13/02/05 23:47:11.81
>>80
これ読んで。
Model-View-ViewModel デザイン パターンによる WPF アプリケーション
URLリンク(msdn.microsoft.com)

85:デフォルトの名無しさん
13/02/06 02:00:05.02
いけません。じゃねーんだよw CallMethodActionくらい教えたれやw

86:デフォルトの名無しさん
13/02/06 02:12:02.76
CallMethodActionなんてクソ冗長なもの使わなくても添付プロパティで
<Button CallMethod.EventName="Click" CallMethod.MethodName="Ok"/>
みたいに書けるようにするのは割と簡単にできる
添付プロパティの勉強には丁度いい

87:デフォルトの名無しさん
13/02/06 02:47:53.68
ここでFWの上に自作FW載せる的な解はどうかと思うんだがw 確かに可能だし簡潔だが
86やるなら、MSのPasswordHelperあたり見たらいいぜ

88:デフォルトの名無しさん
13/02/06 03:13:16.53
76ですが、受信のたびにUpdateLayoutかけると一番したにスクロールさせることができました。
ただ、自分がListBox内に重い処理をしていることもあり、かなりもっさりしてしまいました。
なので無理に昇順にひょうじさせるのではなく、降順にならべてスクロールしない方向でいこうかと思います。

89:デフォルトの名無しさん
13/02/06 11:14:02.13
>>84
そいつはWPF切った裏切り者だぞ

90:デフォルトの名無しさん
13/02/06 11:56:10.29
複数の画面で全く同じリストを選択させるリストボックスがあって、そのリストの値ををXAMLのResourcesDictionaryに書く場合は、
XAMLをコンパイルする段階で値が決まっている必要がありますか?

91:デフォルトの名無しさん
13/02/06 11:56:55.11
ユーザーコントロールにしろ

92:デフォルトの名無しさん
13/02/06 13:04:06.78
<StackPanel Orientation="Horizonal">
<RadioButton HorizontalAlignment="Center"/>
<RadioButton HorizontalAlignment="Center"/>
</StackPanel>

これでラジオボタンが水平方向に二つ、並ぶはずが左寄せです

原因はなんでしょうか

93:デフォルトの名無しさん
13/02/06 13:14:43.78
親がHorizontalなStackPanelであること

94:デフォルトの名無しさん
13/02/06 13:48:56.73
すげーワラタ

95:デフォルトの名無しさん
13/02/06 13:50:08.54
>>93
ありがとうございます。
確かにOrientatinはずしたら真ん中に寄りましたが、垂直方向に二つ連なりました

水平方向に、二つのラジオボタンを中央よりに配置させる方法はないんでしょうか?
AndroidのXMLだったらできたのですが・・天井

96:デフォルトの名無しさん
13/02/06 14:26:11.33
StackPanelのHorizontalAlignmentをCenterにするとか
既定ではStretchなのでStackPanelの横幅は親コントロールと同じになる(マージンとか除く)
CenterにするとStackPanelの横幅は子コントロールを描画するのに十分な横幅だけになる

97:デフォルトの名無しさん
13/02/06 15:36:56.36
>>95

Grid.ColumnDefinitions使ったほうがいいんじゃないの?

98:デフォルトの名無しさん
13/02/06 15:56:26.47
やっぱりWPFはだめですね

99:デフォルトの名無しさん
13/02/06 16:25:47.44
>>96-97
やってみます
ありがとうございました

100:デフォルトの名無しさん
13/02/06 21:27:08.29
テキストボックスを継承したカスタムコントロール作ったんだけど、おいても何も表示されない
どういうことですか?

101:デフォルトの名無しさん
13/02/06 22:31:45.28
そーゆーことですな

102:デフォルトの名無しさん
13/02/06 23:11:29.78
ViewModelからViewを操作ってみんなどうしてる?
ダイアログや画面遷移くらいは妥協して、ViewModelでやってしまいそうだ

103:デフォルトの名無しさん
13/02/06 23:13:36.76
IHogeViewインターフェイスとコードビハインドだな
メッセージは嫌い
ダイアログや画面遷移はむしろVMからサービス呼び出す形の方が再利用が利いていいと思う

104:デフォルトの名無しさん
13/02/06 23:27:51.20
サービス?
メッセンジャーは使いづらいよなぁ

105:デフォルトの名無しさん
13/02/06 23:31:24.00
>>104
サービスはPrismの画面遷移を見ればわかる
要は差し替えさえ可能ならいいわけで、MVVMの枠にとらわれないでやるってことだ

106:デフォルトの名無しさん
13/02/06 23:38:21.57
そんなまどろっこしいことしなくていいよ
インスタンス作ってShowしちまえ

107:デフォルトの名無しさん
13/02/07 07:53:20.98
Prismの仕組みは知らんが抽象的な画面遷移サービス的なの作ってそこに対してVMからお願いすればいいんじゃないかね。
テストなどではUIは空っぽだけど、実際にはそのVMに対するUIとか引っ張って来れてそれに対してダイアログ出すとか。

108:デフォルトの名無しさん
13/02/07 10:12:58.05
おまいら、お絵かきアプリみたいの作るとしたらどこまでMVVMとか使う?
MVVMでなくてもいいんだけどいろいろなロジックをどこにどう分離するかを聞きたく。
あとShapeを使おうと思ってるんだけどこれのあたり判定とかってShapeを列挙してできるもんだっけ?
あるPointをもとにそのShapeが上にあるかどうかを判定するような。

109:デフォルトの名無しさん
13/02/07 10:31:56.27
できるんだっけ・・・って。前は知ってたんだろうな。
ShapeはUIElementだ。他のコントロールでできることならできる。

110:デフォルトの名無しさん
13/02/07 12:53:28.17
UIElementでできるかわからんです(´・ω・`)

111:デフォルトの名無しさん
13/02/07 12:58:46.50
できる。shapeに括る必要がないことだしggrks

112:デフォルトの名無しさん
13/02/07 14:09:19.98
Geometryを使うのが一番straightforwardな方法
そういうのはMVVMあんまり有効に働かないと思う
図形のデータモデルをCommandデザインパターンでいじくり回して
それを自作コントロールの描画キャンバスで可視化するって考え方でいいのでは

113:デフォルトの名無しさん
13/02/07 15:26:36.68
VisualTreeHelper.HitTestで望みのが出来そうでした。Geometryでもいけそうですが、未確認(´・ω・`)
けどストアアプリでも同じようなの必要だったんだけどそっちだと類する奴が見つからん。どっかにあるのかしら…(;´Д`)

114:デフォルトの名無しさん
13/02/07 15:47:16.54
ストアアプリはVisualTreeHelper.FindElementsInHostCoordinatesで出来るみたいですね。

115:デフォルトの名無しさん
13/02/07 15:54:08.09
この辺の微妙な違いはどっかで調整しないのかしら…(´・ω・`)

116:デフォルトの名無しさん
13/02/07 15:55:27.96
しかしかずきはレベル高いよな
あの若さであれだけなんでも知ってるってすごいわ
俺なんてMSDN見ても理解できないからググってとりあえず使い方だけ覚えて実装してやり過ごしてるが、基本からすべて理解とか頭良すぎる
どうやったらあの領域まで上れるんだが・・・

117:デフォルトの名無しさん
13/02/07 16:07:16.48
理解できないんじゃないだろ。理解しようとしないんだw
そうやってあちこちでまぁいいやって逃げてたら、基礎がないからなにもかも理解できないわ

118:デフォルトの名無しさん
13/02/07 16:26:58.04
ただかずきはフォーラムでけむたがられてる気がする
自分の見た範囲ではフォーラムであまり有益な回答を
してないのでポイントを貰ってない

本人はそのことをどう思ってるのかちょっと気になる

119:デフォルトの名無しさん
13/02/07 16:57:08.50
ネットwatch板でやれ

120:デフォルトの名無しさん
13/02/07 17:12:58.08
たまたまかもしれないけど
大体一番最初に回答してて3~4行ぐらいの回答
それでわかるなら質問してない気もするんだけど

であとの人がコード付きのていねいな回答しててそっちにマークがされてる

121:デフォルトの名無しさん
13/02/07 17:40:35.57
しょうもな

122:デフォルトの名無しさん
13/02/07 18:33:50.30
批判は余所でやれといいたい
だがみっと氏はいったいどこまで詳しいんだと、ひたすら感心するわ

123:デフォルトの名無しさん
13/02/07 18:43:37.39
昔いたMVPの人も詳しかった
全然blogも更新されなくなってどうしたんだか気になる

124:デフォルトの名無しさん
13/02/07 20:32:52.21
カスタムコントロールについてお聞きします。
1つめ
TextBoxを継承したTextBox2のDefaultStyleにTextBoxを指定。
TextBox2を継承したTextBox3のDefaultStyleにTextBox2を指定した場合、何も表示されないのはなぜなのでしょうか?
TextBox2のStyleを指定したのだから、TextBox2のStyleに指定されているStyleで表示してくれないのですか?

2つめ
上記で作成したTextBox2のTextをOverrideして、そのTextが変更された時に他の添付プロパティを弄って変更通知を出したいのですが、どうしたらいいでしょうか?

よろしくお願いします。

125:かずき
13/02/07 22:36:26.66
最近なかなか、パソコンから回答ができなくて…。短い回答になってます。

126:デフォルトの名無しさん
13/02/07 22:49:44.23
LivetのHP見れない?

127:デフォルトの名無しさん
13/02/07 23:10:09.20
DataGridのDataContextって、DataTableではないとダメなんですか?
カラム名と同じ名前のプロパティを持させたクラスを与えてもバインドされないんですが・・・

128:デフォルトの名無しさん
13/02/07 23:19:40.36
バインド先はItemsSourceだろ
型はIEnumerableだから、IListSourceのみの非型付DataTableは無理じゃねえかな

129:デフォルトの名無しさん
13/02/07 23:22:23.36
ListBoxにDataTableをバインドさせて、列名を指定して、それを表示させたいんだけど、どうすればできますか?
リストとかならできますが、DataTableはよくわかりません

130:デフォルトの名無しさん
13/02/07 23:22:27.29
>>127
リストでもコレクションでも行けるよ
DataSource設定してる?
してるならカラムでバインドがうまくいってないんじゃないのかな

131:デフォルトの名無しさん
13/02/07 23:24:45.41
>>129
別に何も変わらん

132:デフォルトの名無しさん
13/02/07 23:28:02.35
WPFのdatagridとEFは相性が悪い

133:デフォルトの名無しさん
13/02/07 23:32:56.84
WPFでDataSet系は使わないな

134:127
13/02/07 23:34:16.80
↓ この例だと何が欠けているのでしょうか・・・

namespace MVVM
{
  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();  
      var m = new Model();
      m.no = "123";
      m.id = "456";
      m.flag = true;
      dg.DataContext = m;
    }

    class Model
    {
      public string no;
      public string id;
      public bool flag;
    }
  }
}

<DataGrid AutoGenerateColumns="False"Name="dg" ItemsSource="{Binding}">
  <DataGrid.Columns>
    <DataGridTextColumn Binding="{Binding Path=no,Mode=TwoWay}"></DataGridTextColumn>
    <DataGridTextColumn Binding="{Binding Path=id,Mode=TwoWay}"></DataGridTextColumn>
    <DataGridTextColumn Binding="{Binding Path=flag,Mode=TwoWay}"></DataGridTextColumn>
  </DataGrid.Columns>
</DataGrid>

135:デフォルトの名無しさん
13/02/07 23:38:28.67
> public string no;
public string no { get; set; }

136:デフォルトの名無しさん
13/02/07 23:40:12.76
オブジェクト一個だけ入れてどうするんだよ
コレクションに突っ込んでコレクションをDataContextに入れる

137:デフォルトの名無しさん
13/02/07 23:42:00.86
それ以前に何がしたのか判らねえ

138:デフォルトの名無しさん
13/02/07 23:44:23.63
WPFのDataGridはやめといたほうがいいぞ
どうせ後でWindowsFormsHost+DataGridViewに移行することになるから

139:デフォルトの名無しさん
13/02/07 23:53:33.98
>>124
1.そういう謎仕様
2.カスタムコントロールの添付プロパティを新規で作るのは面倒臭いからやめとけ

140:デフォルトの名無しさん
13/02/07 23:54:34.06
List<Model> modelList=new List<Model>();
var m = new Model() { no = "123",id="456",flag=false };
modelList.Add(m);
dg.DataContext = modelList;

    class Model
    {
      public string no { get; set; }
      public string id { get; set; }
      public bool flag { get; set; }
    }

141:デフォルトの名無しさん
13/02/07 23:55:04.02
>>135-136
工数の問題でプロパティは省きました
プロパティを実装し、

var list = new List<Model>();
list.Add(m);

dg.DataContext = list;

これにしたら表示されるようになりました
ありがとうございました。

>>137-138
もう既にWPSである程度つくってしまいました・・・。

142:デフォルトの名無しさん
13/02/07 23:56:17.06
>>140
ありがとうございました。

143:デフォルトの名無しさん
13/02/07 23:58:03.82
DataGridをWPFで作る意味が分からん
重いし遅いしどうせWPFのメリットも活用できないんだからそこだけWindowsFormsHostでいいのに

144:デフォルトの名無しさん
13/02/07 23:59:57.25
重いのは昔だけだろ
最近は改善されてるし、Winformsを混ぜるのは正直気持ち悪い

145:デフォルトの名無しさん
13/02/08 00:00:23.43
WindowsFormsHostは表示がヒドイ
vs2012でデザイナは上手く動くようになったのか?

146:デフォルトの名無しさん
13/02/08 00:01:18.35
>>145
関係ない
WindowsFormsHostはUserControl載せるもんだ
WinFormsのUserControlのデザイナで作ればいい

147:デフォルトの名無しさん
13/02/08 00:03:44.80
表示壊れなくなったりスプリッタがまともに動くようになったら使ってもいい

148:デフォルトの名無しさん
13/02/08 00:05:50.36
お前らは同時に何行出してんだよw
仮想UIって表示しているところだけリソース喰うんだろ?なら軽そうじゃん

149:デフォルトの名無しさん
13/02/08 00:07:21.23
>>148
WinFormsと比べてみりゃわかるよ
次元が違う

150:デフォルトの名無しさん
13/02/08 00:08:52.44
画面上のコントロールを操作したい場合って、コードビハインドに書くしかないの?
できればすべてViewModelでなんとかしたい

151:デフォルトの名無しさん
13/02/08 00:11:24.64
>>150
そういう思考から脱却できないなら諦めてコードビハインド使っとけ
MVVMは論理的な状態が変化したことによって結果的にコントロールの状態が変わるんだよ

152:デフォルトの名無しさん
13/02/08 00:14:13.66
M-V-VMパターンでViewModelのコマンド実行後に何か処理したいよね
URLリンク(d.hatena.ne.jp)

153:デフォルトの名無しさん
13/02/08 00:18:31.10
>>152
そこまでしてイベントハンドラを使わない意味が分からない
その点には触れてないし分かりづらいだけで実質イベントハンドラそのものじゃねえか

154:デフォルトの名無しさん
13/02/08 00:19:26.47
Viewは本来無くてもいいってことを理解してもらわないと

155:124
13/02/08 00:19:49.86
>>139
そういうことなんですか?
2つ目はどうにもできないのでしょうか?

156:デフォルトの名無しさん
13/02/08 00:20:49.69
なんか実用度外視だよな

157:デフォルトの名無しさん
13/02/08 00:21:56.38
VMに何でもさせるんじゃないよ
VからみるとVMもMも変わらない
ただのモデルにしか見えない

V → (VM+M)

158:デフォルトの名無しさん
13/02/08 00:24:58.04
MVVMのこういう記事読むと
 本 末 転 倒
この言葉が頭に浮かぶことがなんと多いことか

159:デフォルトの名無しさん
13/02/08 00:27:51.07
V+VM M
こうだろ?

160:デフォルトの名無しさん
13/02/08 00:30:01.33
>>159
それは勝手に人間様がそう思ってるだけで
Vから見たらVMはV側じゃないM側

ビジネスロジックが~って言ってるのは人間だけでコード上は
VMはVの下請けじゃない

161:デフォルトの名無しさん
13/02/08 00:33:37.55
あらゆる物をゴールデンハンマーで解決しようとすんのは雑技よね
あるいはcode golfに近いか
そんなもん初心者に読ませないで欲しい

162:デフォルトの名無しさん
13/02/08 00:34:59.83
>>160
でも実際の役割はそうだろ?
VMでVが表示するためのプロパティ作ってるんだから

163:デフォルトの名無しさん
13/02/08 00:40:24.89
いいえ

VからM見る(binding)のも
VからVM見るのも
同じ

164:デフォルトの名無しさん
13/02/08 00:44:16.12
セグメント?が変わると区分も変わるだろうけど…

165:デフォルトの名無しさん
13/02/08 12:08:18.69
視点を変えればそう捉えることもできるだろう
仮想マシン側からILを見ると、C#もVBも大差ないようにね

166:デフォルトの名無しさん
13/02/08 12:15:08.11
>>163
宗教論争してもしょうがないけど自分はVMはVに画面表示に専念させる為のブリッジだと思うけどね。テストなども考慮した上での。

167:デフォルトの名無しさん
13/02/08 12:24:04.25
XAMLでColorAnimationのStoryboardを定義したとして、実行時に値によってFromの色を変えるような事って出来たっけ?
具体的には値が変わった時、前よりも値が増えた時と減った時で色を変えようとしてます。
変わった時点でその前のStoryboardを止めて新しいのをスタートさせてる。
コードビハインドで書いた奴は思った通りに動いたけれど。
定義だけXAMLでそのスタート、ストップはコードビハインドでも構いません。

168:デフォルトの名無しさん
13/02/08 12:33:39.16
またお前か。動いたんだしそれでいんじゃねーの

169:デフォルトの名無しさん
13/02/08 14:03:01.94
より良い書き方を追求するのは良いことだろ( ´Д`)y━・~~

170:デフォルトの名無しさん
13/02/08 14:05:13.88
俺は良いと思わないので却下

171:デフォルトの名無しさん
13/02/08 15:37:26.03
なぜWPFのコントロールはvisibility=falseで表示になるんでしょう?

172:デフォルトの名無しさん
13/02/08 15:39:23.38
>>170
知らない無能は黙ってればよいよ。

173:デフォルトの名無しさん
13/02/08 16:15:30.86
>> 171

Visibilityに設定できるのはVisibility列挙値(Visible,Hidden,Collapsed)だけ

それ以外の値(true,falseとか)は無視されるので
デフォルト価のVisibility.Visibleになってるだけだな

174:デフォルトの名無しさん
13/02/08 16:20:33.09
DataGrid_CellEditEndingイベントの引数eから、DatagridCellの参照を得るのは無理なのでしょうか

e.EditingElement as DataGridCell

はnullでした

175:デフォルトの名無しさん
13/02/08 16:30:36.74
デバッガで止めて引数一通り確認することから始めれば

176:デフォルトの名無しさん
13/02/08 16:31:15.89
>>173
!!!
ありがとうございました。

177:デフォルトの名無しさん
13/02/08 16:36:33.61
>>175
e.RowからDataGridRow
e.ColumnからDataGridTextColumn

が取れました

178:デフォルトの名無しさん
13/02/08 17:22:09.09
createGraphicsがないんだが

179:デフォルトの名無しさん
13/02/08 17:37:52.46
急にレスが増えたNE

180:デフォルトの名無しさん
13/02/08 18:27:00.12
そうですか無いですか
無いんですよWPFにはそういうの
絶望した?した?

181:デフォルトの名無しさん
13/02/08 19:54:04.21
依存関係プロパティの簡単な作り方ってあります?

182:デフォルトの名無しさん
13/02/08 20:09:21.03
{get;set;}みたいなものは無いのか?ってことならそんなもんないよ
言語が支援してるわけじゃねーもん

183:デフォルトの名無しさん
13/02/08 20:19:01.12
propdpと打ってTab二回

184:デフォルトの名無しさん
13/02/08 20:26:02.36
あの宣言の面倒くささには
IDEがあるにしても限度は必要だと感じてしまうよな

185:デフォルトの名無しさん
13/02/08 21:41:56.33
新規で作った依存関係プロパティのセッターで初期から用意してある依存関係プロパティを操作したいんだけど、これはオーバーライドする感じ?

186:デフォルトの名無しさん
13/02/08 22:37:59.28
かずきさん、ここ見てみみたいなんで要望あるんですが
Rx入門v0.1.pdfをもう少し初心者向けの解説増やしてもらえませんか?
具体的にはイベントに関してなんですが、neueさん等もWPFやWP前提でFormでどう使えばいいのか実装例含めて解説して欲しいです。

187:デフォルトの名無しさん
13/02/08 22:40:23.07
ツイッターかブログで直接言えや

188:デフォルトの名無しさん
13/02/08 22:41:47.16
こりゃあからさまに宣伝だな。臭過ぎる。

189:デフォルトの名無しさん
13/02/08 22:53:46.06
悲しいことにRxはもうオワコンなんだよ・・・

190:デフォルトの名無しさん
13/02/08 22:54:44.25
>>187-188
文句あるならお宅らが答えてもいいんじゃよ?
答えられないでしょ?

191:デフォルトの名無しさん
13/02/08 23:02:27.51
WPF自体 将来性はどうなの?
このままフォームアプリケーションと同時でサポートされていく感じ?

それともsliverlightのように死亡確定?

192:185
13/02/08 23:11:00.84
ちょっと書いてみたんですが、どこが間違っているか教えて下さい。
URLリンク(ideone.com)

193:デフォルトの名無しさん
13/02/08 23:13:35.15
>>191
そもそもクライアントアプリに将来性がない
MSはHTML5を全面に押し出して今絶好調みたいだからこのままどんどんwebにシフトしていく

194:デフォルトの名無しさん
13/02/08 23:13:59.83
誰にもわからないと思うよ
このまま微調整だけくわえられていくのか
大幅に変わるのかも分からない
今のままだとフェードアウト確定

言語からサポートを受けるようになれば…

195:デフォルトの名無しさん
13/02/08 23:36:52.60
まあとれも深追いしないのがいい

196:デフォルトの名無しさん
13/02/08 23:39:53.46
>>192
プロパティの setter じゃなくて、DependencyProperty.Register に渡す PropertyMetadata の PropertyChangedCallback 内で処理する。
setter、getter はユーザーコードから使いやすくするための単なるラッパーで、フレームワークからは呼び出されない
(フレームワークがプロパティ値を設定・取得するときは SetValue・GetValue が使われる)。

197:185
13/02/09 00:04:16.26
>>196
ありがとうございます。
そういうことだったんですね、修正しました。
URLリンク(ideone.com)

でも、静的なのにどこに値を格納してるのかわかりません。

198:デフォルトの名無しさん
13/02/09 00:07:24.91
WPFとしては分からんけどXAMLとしてはしばらく無くならんとおもうけどね。
多分WinRTでデスクトップアプリも作れるようにすると思うし。

HTMLはそれだけって風にはならなそうな気がするけど。
WinMDの実装技術としてHTMLも選べてネイティブと一緒にできるってのが正しいあり方な気がするわ

TypescriptでXAMLをナチュラルに使えるようになると面白いんだが。

199:196
13/02/09 00:29:14.67
>>197 のコード、ValidateValueCallback じゃなくて、PropertyMetadata のコンストラクタに渡す PropertyChangedCallback を使う。間違えてる。
ValidateValueCallback は値の検証用。

WPF フレームワークのプロパティ値は SetValue で直接値を代入した時だけメモリが確保される仕様。クラスのインスタンスは単なるハンドル。
インスタンスが作られた時に全てのプロパティ用にメモリを確保すると、メモリをバカ食いするし、他のインスタンスと同じ値ばっかりで無駄が多い、
あと、Style や VisualTree とかで同じ値に設定する状況でインスタンス一個一個の値を設定することになって重い。
それを避けるために、他と値が共有できる状況なら、値を共有して軽くしてる(プロキシ・パターンとかフライウェイト・パターン)。

200:196
13/02/09 00:33:41.69
訂正 VisualTree → VisualTree とかで使われるプロパティ値の継承

201:185
13/02/09 01:23:12.30
>>199
度々ありがとうございます。
WinForms感覚で考えると全然駄目なんですね、
無事、依存関係プロパティ自体を作ることが出来ました。
URLリンク(ideone.com)

ただ、バインドがうまく入ってないのか、Textの値が変わってくれません。

202:デフォルトの名無しさん
13/02/09 05:13:08.92
OnDateChangedのSetValueは、引数dが実体なんだから
TextPropertyにtextbox2を付けないとダメじゃね。subがsharedだし見えないでしょ。

203:デフォルトの名無しさん
13/02/09 05:16:56.16
>>201

どううまく行かないのか書いてないからわからんけど
バインドしてるプロパティの値を変えても、表示されるTextに変化がないってことなら

①XAMLでのバインドの仕方が間違ってる。OneWayないしTwoWayに。(OneTimeやOneWayToSourceではダメ)
②プロパティにINotifyPropertyChangedを実装してない

このどっちかじゃないかな

ちなみに、やりたいとこがDate型の値をyyyy/MMで表示したいだけなら
わざわざTextBoxを継承した独自のコントロール作ったり大がかりなことするより
Converterかました方がずっとお手軽だと思うw

204:デフォルトの名無しさん
13/02/09 05:17:20.37
あ、アホなこと言ってた。それはいいのか

205:デフォルトの名無しさん
13/02/09 05:38:13.39
あと入力されたときTextからDateValueに値突っ込まないとダメじゃね

206:デフォルトの名無しさん
13/02/09 12:26:35.07
>>201
新しいプロジェクト作って、そのコードと以下を追加して、実行してみたけど、期待通りに表示されたよ。

<StackPanel>
&nbsp; &nbsp;<local:TextBox2nd x:Name="_textBox2"/>
&nbsp; &nbsp;<Button Content="Set" Click="Button_Click_1"/>
</StackPanel>

Private Sub Button_Click_1(sender As Object, e As RoutedEventArgs)
&nbsp; &nbsp;_textBox2.DateValue = DateTime.Now
End Sub

最小限の構成で試してみたら?

207:206
13/02/09 12:31:12.87
あ、スペースを &nbsp; に変換して書き込んでしまった。削除して読み替えて。

208:185
13/02/09 13:23:42.08
>>203
TwoWayにしています。
バインドするプロパティにINotifyPropertyChangedを実装していなかったので、実装しましたが、
Textに日付の文字列が入ってくれません。
他にもお手軽な方法があるのがあったんですね、まぁいつかはわからないといけなくなると思うので練習がてらカスタムコントロールでやっていこうと思います。

>>206
実行してみましたが、DateValueに値が入っていることが確認できました。
自分もそこまでは行くんですが、それの後にTextに日付が入らないことが最後の問題なっています。

まさかここまで難しいとは思いもよらなかったです。
URLリンク(ideone.com)

209:デフォルトの名無しさん
13/02/09 14:05:51.74
ListBoxにRichTextBoxを張り付けて項目を表示しているのですが、
RichTextBoxをクリックしてもListBoxItemが選択されません。
RichTextBoxをクリックしてListBoxItemが選択されるようにするにはどのようにすればいいでしょうか。

210:デフォルトの名無しさん
13/02/09 17:57:00.97
>>208
そのコード、TextBox を継承するなら TextProperty を再定義する必要はないよ。
TextBox が公開している OnTextChanged を override すれば実現できる。

何らかの理由で TextBox.TextProperty の PropertyChangedCallback を置き換えたい場合は、
静的コンストラクタで TextProperty.OverrideMetadata メソッドを使えば可能。再定義は不要。

211:デフォルトの名無しさん
13/02/09 19:21:13.54
Bitmapに相対パスで画像を入れたいのですができません

Bitmap bmp = new Bitmap("test.bmp");
こう書いたのですがエラーが出て強制終了します
ファイル名を絶対パスで書くとエラー出ませんでした
ファイルはカレントに置いてあるはずなんですが、書き方間違ってますか?

212:デフォルトの名無しさん
13/02/09 19:39:44.62
exeとbitmapを同じフォルダに置いてexeを起動してみてはどうか

213:185
13/02/09 20:56:01.55
>>210
再定義をやめても、今までどおり動作しました。

Dateを入れたときにTextには反映されていますが、Textを変更した時にDateに反映されないのは
DateValueにPropertyChangedが実装されていないからでしょうか?

214:デフォルトの名無しさん
13/02/09 21:23:44.02
namespace Hoge
{
   public class MyConverter : IValueConverter
   {
   }
}

   <StackPanel HorizontalAlignment="Center"
      VerticalAlignment="Center"
      xmlns:local="clr-namespace:Hoge">
         <CheckBox IsChecked="{Binding Flag, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={MyConverter}}" />
   </StackPanel>



コンパイルが通りません
エラー1XmlNamespace、Assembly または ClrNamespace が Mapping 命令にありません。 行 19 位置 41.
エラー2型 'MyConverter' が見つかりませんでした。アセンブリ参照が失われていないか、また、すべてのアセンブリがビルドされているかを確認してください。


何が悪いのでしょうか

215:デフォルトの名無しさん
13/02/09 21:30:23.42
理解不足なんじゃないの?

216:デフォルトの名無しさん
13/02/09 21:31:33.93
local:MyConverter

217:デフォルトの名無しさん
13/02/09 21:32:53.56
>>212
exeを起動してみたところ古いデータになっていて、デバッグなしで実行していたせいでした。
ありがとうございます

218:デフォルトの名無しさん
13/02/09 21:38:57.58
>>215
はい

>>216
ありがとうございました。

219:デフォルトの名無しさん
13/02/09 21:46:55.62
>>209
Stack Overflow: Selecting a Textbox Item in a Listbox does not change the selected item of the listbox
URLリンク(stackoverflow.com)

>>213
> DateValueにPropertyChangedが実装されていないからでしょうか?
関係ないんじゃない? OnTextChanged にブレークポイントを置いて実行してみて、呼ばれているかどうか確認してみれば?

>>214
"Converter={MyConverter}" が駄目。そこにクラス名は書けない。下の解説を読みなおして。
MSDN : IValueConverter インターフェイス
URLリンク(msdn.microsoft.com)

220:185
13/02/09 23:45:57.49
>>219
無事完成しました。
ありがとうございます。
ブレイク貼ったら全然通ってませんでした。
イベントにして解決しました。Shadowsでなんで走らなかったのかは謎ですが・・・
URLリンク(ideone.com)

身近にWPFに詳しい人がいなかったので、とても助かりました。
独学じゃ挫折しそうです。
ありがとうございました。

221:デフォルトの名無しさん
13/02/09 23:55:55.36
Shadows と Override じゃ全然意味が違うぞ。
>>210 は Private Shared Shadows Sub OnTextChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs) じゃなくて、
Protected Overrides Sub OnTextChanged(e As TextChangedEventArgs) を使えって意味だと思う。

222:185
13/02/10 01:00:04.08
>>221
>>220のLostfocusイベントのところをすでにあるOnLostFocusをOverrideしたら、同様に動作しました。
こっちのほうが見栄えがいいですね。
ありがとうございます。
これは依存関係プロパティとは関係ないのでSetValueとかではなく、通常のプロパティを弄る感じなんですね
やっといろいろ分かって来ました。

223:デフォルトの名無しさん
13/02/10 23:34:37.87
MVVMってエントリーポイントはどこになるんですか?
イベント駆動だと、StartupUriに書いたクラスのコンストラクタもしくはLoadedイベントに書くはずですが・・・

224:デフォルトの名無しさん
13/02/10 23:41:03.48
VMのコンストラクタでやるか、それでできないことならイベントハンドラからVMのメソッドを呼べ

225:デフォルトの名無しさん
13/02/10 23:49:23.51
それはアプリケーションが常にVMを生成することを担保しないといけなくないですか?

軽く調べてみたら、App.xamlのstartupuriを消して、startupにして
そこからVMとVを作るという方法があるようですが・・・

226:デフォルトの名無しさん
13/02/11 00:14:38.27
そんなもんMVVM関係ないだろう。App.Startupイベントでも使え。
MVVMはビューをスマートに実装する仕組み以上のものじゃない。一つのビューに閉じた話。

227:デフォルトの名無しさん
13/02/11 01:37:28.79
むしろMVVM的なものをアプリの何処で生成したらいいかって話じゃね?
Prismとかでググれ

228:デフォルトの名無しさん
13/02/11 03:28:16.72
formsで言うUpdate()やInvalidate()のようにコントロールを強制的に再描画させたいのですが、どうやればできますか

229:デフォルトの名無しさん
13/02/11 10:27:08.19
InvalidateVisual
でもWPFではDrawingを動的に変更するのはやらないのが基本。Visualを動かせば勝手に反映される。
頻繁なOnRenderとかもってのほか。

230:225
13/02/11 12:21:55.80
分からなかったのは

アプリケーションを起動したときに、最初に

DateContext = new Model();

とかやるじゃないですか
ここはどこでやるべきなのかなーと

Windows.csには原則何も書いてはいけないらしいですから、Viewではないですし

231:デフォルトの名無しさん
13/02/11 12:26:06.09
>>230
コンストラクタに書くのが普通
コードビハインドを書いてはいけないなんてことはない。それ以外のコードも書くし必要ならイベントハンドラも使う。

232:デフォルトの名無しさん
13/02/11 12:30:45.77
有象無象が発言した「原則」とかなんで信じるの?馬鹿なの

233:デフォルトの名無しさん
13/02/11 12:44:15.89
DIやサービスロケータを使わないのなら、VMが依存するサービス類の依存性解決もVで明示的にやることになるな

234:デフォルトの名無しさん
13/02/11 12:52:55.48
ほーらまたMVVM教が一人の初心者を狂わせたぞ
責任取れカス

235:デフォルトの名無しさん
13/02/11 12:58:06.51
テストのためのパターンなのにパターンそのものが目的みたいになってしまってるよな。
MVVMやるならVMの単体テストを書け。
Prismがなんでああいう構造になってるかなんて自分でテスト書いてみないと理解できない。

236:デフォルトの名無しさん
13/02/11 13:04:44.76
デザイナ用のデータコンテキスト(d:DataContext)もあるし、インスタンスの生成をどこでどう制御するのがベストなのかよくわからん

237:デフォルトの名無しさん
13/02/11 13:20:59.10
原則がなぜ存在するのか、原則を外れていいのは時はどんなときか
これらを知らないと原則を盲目的に守るしかなくなる

コードビハインドをあまり書くなってのは、単にUIに依存したコードはテストしにくいから

238:デフォルトの名無しさん
13/02/11 13:25:27.57
コードビハインドっていい事だよね

239:デフォルトの名無しさん
13/02/11 13:32:09.37
Modern用のKone見た人おる?

240:デフォルトの名無しさん
13/02/11 17:47:59.48
>>229
ありがとうございます

241:デフォルトの名無しさん
13/02/11 18:30:51.16
ViewModelにIDisposableなオブジェクトを持たせることはありでしょうか。
ViewModelもIDisposableにして、Window終了時に確実にDisposeを呼びたいんですが、
Closedイベントで (DataContext as IDisposable).Dispose(); とするのが普通ですか?

242:デフォルトの名無しさん
13/02/11 18:36:44.80
それでOK

243:デフォルトの名無しさん
13/02/11 18:42:50.36
ただas使ってるのにチェックなしでDisposeするのは変

244:デフォルトの名無しさん
13/02/12 06:31:41.50
必ずやるならfinallyでやるとすると、VM型の参照持っておかね

245:デフォルトの名無しさん
13/02/12 07:19:53.04
MVVMってViewModel.csに一つのイベント事にICommandを実装したクラスを書くのがひとつの形なんですか?


URLリンク(www.atmarkit.co.jp)

つまりbuttonが10個あるとして、10個全てのイベントの中身が違うとしたら、
ViewModel.csにICommandを実装したらクラスを10個書く・・・

そういうことを上の記事は推奨しているように見えます

246:デフォルトの名無しさん
13/02/12 07:47:09.83
賛否あるだろうけど、標準でやれるのはソレだけだし、そうだと思う。
クラス10個は書かないでいいだろうけど…。
よく使われてるのは、汎用的なICommandを実装したクラスを1つ用意して、
それを使いまわして、個々の実装はデリゲートでメソッドを受け取るって形だと思う。

247:デフォルトの名無しさん
13/02/12 07:50:58.39
DelegateCommand とか RelayCommand でググれば分かると思う

248:デフォルトの名無しさん
13/02/12 08:31:47.05
>>246-247
ありがとうございました。
DelegateCommandについては上記記事にも書いてました

249:デフォルトの名無しさん
13/02/12 09:04:51.15
F#なら匿名型でかけるお(´・ω・`) 

250:デフォルトの名無しさん
13/02/12 14:37:27.13
ラジオボタンのIsCheckedを触りたい場合は、VMにboolのメンバー変数持たせて、

IsChecked={Binding Path=変数 Mode=Twoway}

とするのが一般的ですか?

251:デフォルトの名無しさん
13/02/12 14:56:25.52
メンバー変数でなく通知プロパティとバインドさせるのは俺もよく使うが、
問題は「一般的かどうか」より「必要かどうか」だろ

252:デフォルトの名無しさん
13/02/12 14:57:33.81
変数じゃダメ。プロパティにしてやらないとバインドできない。

IsChecked={Binding プロパティ名, Mode=Twoway}

で行ける。

253:デフォルトの名無しさん
13/02/12 15:15:54.97
ラジオボタンという部分が軽視されてるね

254:デフォルトの名無しさん
13/02/12 15:21:35.29
質問の振りした多重ひっかけ問題かw

255:デフォルトの名無しさん
13/02/12 15:23:37.40
ラジオボタンならコンバーターを使って、
その一纏まりを全て1つのプロパティにバインドするのが楽だな。

256:デフォルトの名無しさん
13/02/12 15:25:04.20
テストコード書いて愕然とする人が多そうだね

257:250
13/02/12 15:26:31.34
ありがとうございます
仰る通り、プロパティにしないと駄目でした
なおかつ、Yes/Noの2つのラジオボタンがあって、そのIsCheckedを一つのbool変数で排他的に管理したかったら、
YesのsetにonPropertyChangedでNoのプロパティが更新したことを通知したりしないといけなかっり‥

コピペプログラマーにはWPFは厳しいようです

258:デフォルトの名無しさん
13/02/12 15:27:54.96
ちょっと!
違うでしょwww

259:デフォルトの名無しさん
13/02/12 16:11:16.21
コピペで作るには多少の理解も必要だろうなぁ。
覚えてしまえばコピペできるだろうけど。まぁ当たり前の話か

260:デフォルトの名無しさん
13/02/12 19:27:29.46
WPFでラジオボタンのIsCheckedにバインディングすると
更新時に問題がでるのでそのことを聞いてきたのかと思った

261:デフォルトの名無しさん
13/02/12 19:51:32.70
よかった、問題なんてなかったんだ

262:デフォルトの名無しさん
13/02/12 20:50:56.66
テキストボックスのContentを右寄せに規定値を設定したいのですが、うまくいきません。
どこがまちがっているのでしょうか?
TextBox2はTextBoxを継承したカスタムコントロールです。
コンストラクタに以下を書いています。
HorizontalContentAlignmentProperty.OverrideMetadata(GetType(TextBox2), New FrameworkPropertyMetadata(HorizontalAlignment.Right))

263:デフォルトの名無しさん
13/02/12 21:15:48.55
まずはデザイナいじって目的が達成できるレベルまで実験しろ

264:デフォルトの名無しさん
13/02/12 21:36:24.01
具体的にどういうことですか?

265:デフォルトの名無しさん
13/02/12 22:08:45.41
<TextBox HorizontalAlignment="Right" />が実現したい内容なのか?

266:デフォルトの名無しさん
13/02/12 22:16:04.34
HorizontalContentAlignment="Right"が実現したいことだったのですが、HorizontalContentAlignment.Rightが見つからなかったので
HorizontalAlignment.Rightを使用しました。

267:デフォルトの名無しさん
13/02/12 23:12:31.76
TextBox の HorizontalContentAlignment は扱いがちょっと特殊で DefaultValue なら TextAlignment が優先される仕様なので、
TextAlignment を OverrideMetadata するか、Style で指定したほうが良いよ。

268:デフォルトの名無しさん
13/02/12 23:40:17.58
>>267
そんな仕様だったんですか。
ありがとうございます。

Styleで指定する方法もありましたね

269:デフォルトの名無しさん
13/02/12 23:56:28.96
今XAMLのほうでやってみたんですが、
TextAlignment=center
HorizontalContentAlignment=left
左寄せ
TextAlignment=center
HorizontalContentAlignment=right
右寄せになってしまいます。

難しいですね。。。やっぱりHorizontalContentAlignmentをOverrideMetadataするしかないんですかね?

270:デフォルトの名無しさん
13/02/13 00:04:30.33
シコシコと15個ぐらいのIsEnabledをラップしたプロパティを書いていたら
CanExecuteで設定できることを今知りました・・・

この15個ぐらい書いた

private _IsEnabled
public IsEnabled
{
set { _IsEnabled = value; OnPropertyChanged("IsEnabled"); }
get { return _IsEnabled; }
}

ってどっかで有効活用できないものでしょうか・・・

271:デフォルトの名無しさん
13/02/13 00:06:24.49
CanExecuteはあんまり使わない方いいと、ここの方の教わりました。
Visibleも制御できたらよかったのに

272:デフォルトの名無しさん
13/02/13 00:22:01.06
>>269
何がやっぱりなのかわからない。単に既定値を右寄せにするだけなら >>267 で達成できるはずだけど?

273:デフォルトの名無しさん
13/02/13 00:45:10.10
>>270
CanExecuteはコマンド一つ一つ個別に設定しないといけないから糞
コマンドを独立したクラスで扱う場合にはいいが一般的なMVVMには面倒なだけだからプロパティでいい

274:デフォルトの名無しさん
13/02/13 00:51:38.87
>>269
つーか、もうコンストラクタでフツーのCLRプロパティ方でRight突っ込めばそうならね?

275:デフォルトの名無しさん
13/02/13 08:53:09.53
>271
>273
分かりました。ありがとうございました。

276:デフォルトの名無しさん
13/02/13 19:35:56.39
DataGridのある行と行を比較して、内容が違うセルがあったらForeGroundを変えたいんですんが、やり方がわかりません。

DataContextはListコレクションです。

MVVM風じゃなくてとにかくゴリゴリ力押しで実装しようとして、
var dv = datagrid.ItemSource as DataViewとやったらキャスト失敗してnullになりました

だから、DataGridの行の参照変数ですら取れないんですが&bull;&bull;&bull;

277:デフォルトの名無しさん
13/02/13 19:56:20.44
>>271,274
それでも問題なくいけましたが、>>267を勘違いしていました。
無事OverrideMetadataで実装することが出来ました。

278:デフォルトの名無しさん
13/02/13 22:05:36.70
>>276
ItemSourceは自分でいれたListが入ってるんじゃないのか

比較はそのlistつかえばわかるとして
色はC#ごりごりでこうやるみたいだな

//1行目
var dataRow = (DataGridRow)this.datagrid.ItemContainerGenerator.ContainerFromIndex(0);
//1番目のセル
var txtblock = (TextBlock)this.datagrid.Columns[0].GetCellContent(dataRow);
//赤にしる
txtblock.Foreground = new SolidColorBrush(Color.FromRgb(255,0,0));

279:デフォルトの名無しさん
13/02/13 22:08:09.32
あ、すまん
これじゃ再利用されたところが色かわっちまうのか・・

280:デフォルトの名無しさん
13/02/13 22:08:25.79
みなさんはドッキングってどうしてますか?
avalon dockを使おうと思ってるんですが、情報が無さすぎてどうにもできません

281:デフォルトの名無しさん
13/02/13 22:09:54.21
>>276
きちんとキャストしてあげてばいいんでない?

282:276
13/02/13 23:53:08.80
方法がよくわからないので、マルチバインドを試してみます・・・

283:デフォルトの名無しさん
13/02/14 09:51:37.67
ForegroundにマルチバインドしてコンバーターでBrushに変換するでもよさそうだな。

284:デフォルトの名無しさん
13/02/14 22:16:48.87
ListBoxのListItemの上にヘッダーみたいなのをつけることができますか?

285:デフォルトの名無しさん
13/02/14 22:21:07.91
ヘッダーの意図が分からんが、ListViewとCollectionViewSourceでグループ化?

286:276
13/02/14 22:28:34.75
ここに書いてある方法でセルを取ってゴリゴリ実装しました
URLリンク(techiethings.blogspot.jp)


ところで、VMからバインドを通じてUI弄る場合は自動的にUIスレッドで実行されるみたいですが、
バインド通じないでVMからUIいじろうとしたら、落ちるんですね・・・

もうVMにVの参照持たせて、Window.Dispatcherの参照もらって、VMで書いたラムダ式をDispatcherに投げました・・・

287:デフォルトの名無しさん
13/02/14 22:38:54.05
PresentationFramework参照するのならApplication.Current.Dispatcherでイケるよ

288:デフォルトの名無しさん
13/02/14 22:59:41.55
>>285
DataGridみたいなものをListBoxで作りたいと思ってます

289:デフォルトの名無しさん
13/02/14 23:24:40.45
位置的にはControlTemplateでItemsHostになるScrollViewerの上に何か置けばいいと思うが
URLリンク(msdn.microsoft.com)

この方法で行も含めて縦に割るのは難しい

290:デフォルトの名無しさん
13/02/15 17:31:39.54
ProgressBarのValueとMaximumにViewModelのプロパティをバインディングさせたら、画面が停止するんですが、UIスレッドを占有しちゃているんですかね?

291:デフォルトの名無しさん
13/02/15 19:44:57.54
画面が止まるって事はそういう事なんだろうな

292:デフォルトの名無しさん
13/02/16 21:47:55.71
MVVMってよく分からんけど、Vを作るときは対応するVMを作るようだから、
結局VとVMを同じクラスにしちゃってもいいよね?
例えばWindow作るときは、
<Window DataContext="{Binding RelativeSource={x:Static RelativeSource.Self}}" ...>
でOK?

293:デフォルトの名無しさん
13/02/16 21:53:57.00
VMとMの結合は強いんだから、それじゃ結局全部Vにならないかw

294:デフォルトの名無しさん
13/02/16 21:55:51.00
WPFの使い方としてはむしろそれが普通だがMVVMではない

295:デフォルトの名無しさん
13/02/17 00:16:09.70
>>293
> VMとMの結合は強いんだから
ダウト( ´Д`)y━・~~

296:デフォルトの名無しさん
13/02/17 01:09:15.02
VとVMよりRxでリフレクションした方がより疎結合だと思うんだけど何故かリフレクション嫌がられるよね
イベント作成なんて一度しか実行されないんだからパフォーマンスの低下なんて気にならないでしょ
VMのコマンドとか手間が半端ないんだけど、これ自動生成をVSが標準搭載しないととても使えたもんじゃないよ
InteliSence無しでコーディングするようなもんでしょ

297:デフォルトの名無しさん
13/02/17 01:11:37.09
まじめにMVVMなんてやってないから気づかんかったわ
むしろやってる奴いたんだ
マゾだねえー

298:デフォルトの名無しさん
13/02/17 01:14:04.67
LivetでVWのメソッドを直接呼べるよ

299:デフォルトの名無しさん
13/02/17 06:13:35.75
>>295
そこを疎結合にするって、実装レベルで説明してるようなの見たことないな。
ただのラッパーじゃねっていうVMしか。
イベントでモデル貰ってVMのメンバにバインドとか、そんな感じのアホなことすんの?

300:デフォルトの名無しさん
13/02/17 09:58:42.25
MVVMのサンプルでM->VMを密結合させてるやつなんかねえよw

301:デフォルトの名無しさん
13/02/17 10:43:52.82
VM無くしてVのコードビハインド使ったとしても(良くないが)VMがVに密結合したとしても
M->VM|Vの疎結合って一番死守しなきゃいけないところだろ

302:デフォルトの名無しさん
13/02/17 10:45:37.39
俺はXAMLにはなるべくなにも書きたくないんだけど
いいよね?

303:デフォルトの名無しさん
13/02/17 12:40:08.26
RaisePropertyChanged("変数名");
これの"変数名"って文字列型じゃなくて文字列そのまま渡す方法はないんすかね

C#じゃ引数名はコンパイルすると消してしまうから無理という結論にはなったんですが

304:デフォルトの名無しさん
13/02/17 13:33:21.56
Prism?だったら、Expression<Func<T>> を受け取るヤツないか?

305:デフォルトの名無しさん
13/02/17 15:09:19.79
Livetでもできるしな

306:デフォルトの名無しさん
13/02/17 15:31:46.19
うるせーぞugaya
ちょっと黙れ

307:デフォルトの名無しさん
13/02/17 15:32:36.18
>>302
駄目って言ったらやめてくれるんですか??

308:デフォルトの名無しさん
13/02/17 15:41:15.29
ぶっちゃけWPFに未来はあるの?
winformsのサポートが亡くならない限り無さそうなんですが

309:デフォルトの名無しさん
13/02/17 15:45:15.25
VB6がなくならないのに、どうやってWinFormsから移行させるんだよって話だよね

310:デフォルトの名無しさん
13/02/17 15:49:10.30
そんなんでもしぶとく残ってるという見方もできる

311:デフォルトの名無しさん
13/02/17 16:05:36.88
WPFの人口少なそう

312:デフォルトの名無しさん
13/02/17 16:13:40.22
少なそう、なんじゃない。少ないんだよ。

313:デフォルトの名無しさん
13/02/17 16:16:20.55
日本じゃ特に少ないよな

314:デフォルトの名無しさん
13/02/17 16:32:02.41
クラサバ系はもう終わりだろう
クラサバで業務系アプリ作るより、Webアプリ作るのが時代の流れだし

HTML5 + JS + ASP.NET MVC >>>>>>>>>>>>>>>>>>>>>>>> Form >>>>>>> WPF >>>>>>>>>>>>>>>> Silverlight

315:デフォルトの名無しさん
13/02/17 16:47:31.39
webアプリはクロスプラットフォーム対応が容易って点とインストール不要って部分と
蔵ごとの更新不要って点で、wpf勝ち目ないわ。
IE限定のVBSごりごりなイントラでレガシー炸裂してるのよりも劣る

316:デフォルトの名無しさん
13/02/17 17:33:41.30
ウェブアプリとかネイティブアプリの足下にも及ばない妥協の産物なんだがw
FacebookのザッカーバーグもHTML5に期待しすぎたっつってネイティブアプリに方向転換しただろ
iPhoneだってネイティブアプリあるのにわざわざブラウザから利用するやつなんていねーよ。
パフォーマンスもユーザビリティもネイティブには到底かなわない

317:デフォルトの名無しさん
13/02/17 17:35:05.95
そうか?

318:デフォルトの名無しさん
13/02/17 17:37:27.43
名前を引き合いに出せば粋がれると思ってるやつなんてスルーでOK

319:デフォルトの名無しさん
13/02/17 17:38:41.87
おまえら一体なにを開発しててウェブアプリですべておkとか言ってんの?
マジで気になるわ、教えて

320:デフォルトの名無しさん
13/02/17 17:41:19.44
逆にwebアプリで無理な業務システムってなに?

321:デフォルトの名無しさん
13/02/17 17:43:57.46
やっぱりERPかw
そらウェブで十分だわなw

322:デフォルトの名無しさん
13/02/17 17:45:59.08
Webって無駄な通信多すぎなんだよ

323:デフォルトの名無しさん
13/02/17 17:47:29.36
抽象論でごまかせば押しきれると思ってる奴なんてスルーでOK

324:デフォルトの名無しさん
13/02/17 21:36:18.80
WPFでColorPickerってないの?
ユーザに色選択させたいときってなにをつかえばいい?

325:デフォルトの名無しさん
13/02/17 21:44:36.75
何か作ってください

326:デフォルトの名無しさん
13/02/17 23:27:42.86
俺は自分で作った。

けど、こだわりがなけりゃWinForms用のを使えばいいでしょ。
今ならWinFormsとWPFを併用しても違和感ないし。

327:デフォルトの名無しさん
13/02/18 01:06:22.13
WindowsFormsHostってさじ加減が難しい

328:デフォルトの名無しさん
13/02/18 11:18:00.11
WindowsFormsHost使わなくてもダイアログは出せるよ

329:デフォルトの名無しさん
13/02/18 12:25:43.15
どうせWPFの標準メッセージボックスもWPFじゃないしな

330:デフォルトの名無しさん
13/02/18 12:26:35.79
オウフwww

331:デフォルトの名無しさん
13/02/18 18:29:18.87
お前らMVPVMってどうよ
PがVMとMの間にあるとかはイミフだけどナビゲーションをゴニョゴニョするのが別にあるのは良いのかとも思う。
MSDNの記事にあったMVPVMを踏襲する必要は無いと思うがおまいらの意見を伺いたく。

332:デフォルトの名無しさん
13/02/18 18:34:41.03
Prismのことじゃねえのと思って読みにいったらホントにPrismの話してて笑った
そんだけ

333:デフォルトの名無しさん
13/02/18 18:36:31.37
4層ってのはいいけどMVPVMがいいかといえばよくわからない
メッセージやコマンドをどうすんのか綺麗な答えを出してくれたら
MVPVMにかぎらずそっちに移る

334:デフォルトの名無しさん
13/02/18 18:37:22.81
メッセージ→メッセンジャー

335:デフォルトの名無しさん
13/02/18 18:58:15.21
メッセージ、コマンド、ナビゲーション含め決定だっていまだにないのかね(´・ω・`)

336:デフォルトの名無しさん
13/02/18 19:27:17.57
ナビゲーションとかは別の枠組みであるものだと思っているけど、それがPかっていうと違うと思う。

337:デフォルトの名無しさん
13/02/18 22:14:41.72
コレクションの依存関係プロパティってobservablecollectionじゃなくてfreezablecollectionじゃないと駄目なんでしょうか?

338:デフォルトの名無しさん
13/02/19 14:52:04.08
Binding="{StringFormat=}"


ここで、小数点なしの0埋めなしで表示させたいです。

D

#.#

両方駄目だったんですが・・・

339:デフォルトの名無しさん
13/02/19 15:11:02.25
>>338
ViewModelでやれよ

340:デフォルトの名無しさん
13/02/19 15:29:29.53
コンバーターもあるでよ

341:デフォルトの名無しさん
13/02/19 16:23:21.16
>>338
0

342:デフォルトの名無しさん
13/02/19 20:10:25.36
EventTriggerにCommandを割り当てることはできない?

343:デフォルトの名無しさん
13/02/19 20:24:51.56
コンパイルしたexeを別のPCで実行すると、以下のメッセージがでます。
どういうことなのでしょうか?解決方法をおしえてください。
「既に別の要素の論理子です。まず接続を切断してください」

344:デフォルトの名無しさん
13/02/19 20:25:21.41
>>342
自作アクションにコマンドをバインドしてアクション側で実行すりゃいんじゃね。
なんか既成のあるかも試練けど。

345:デフォルトの名無しさん
13/02/19 20:36:15.63
>>343
そのエラーメッセージでググったん?ヒットしたやつを順番に見てけば見えてくると思うが
直接的な原因は1つじゃないしなんともだ

346:デフォルトの名無しさん
13/02/19 20:41:12.98
>>344
それならいけそうだ。
ありがとう

347:デフォルトの名無しさん
13/02/19 21:17:37.49
いくらやってもできなくて半泣きだったら、原因わかりました
文字列型だったからでした

ありがとうございました。

>>339
Mをコレクションにいれてバインディングしているので、VMはコレクションのプロパティはあるんですが、
個々のデータのプロパティ自体は持ってないんですよ・・・・

348:デフォルトの名無しさん
13/02/19 21:30:45.39
ズコーッ

349:デフォルトの名無しさん
13/02/19 23:57:28.66
>>345
やってみましたが、全然みえませんでした。
画像のせいなのか、プロジェクト参照のせいなのかよくわかりません

350:デフォルトの名無しさん
13/02/20 11:13:25.75
>>349
本当に別のPCのみで起きるのか?VSから実行してたりしてない?
開発マシンでexeを実行してみた?正確に原因を切り分けて行かないと

351:デフォルトの名無しさん
13/02/20 11:36:16.57
>>349
VS上で動くのは偶然で正常じゃない

すでに他の要素の子になってるのをどこかに突っ込むとそうなる

352:デフォルトの名無しさん
13/02/20 11:41:24.73
論理ツリーに入ってるのをどこかに入れたりするとダメ

353:デフォルトの名無しさん
13/02/20 14:51:04.29
Storyboard終了時に関数を実行したいんだけどどうすれば実装できますか?

<EasingDoubleKeyFrame KeyTime="0:0:1.0 ・・・
のところに実行するための値があるのでしょうか?

354:デフォルトの名無しさん
13/02/20 15:10:50.88
自己解決しました。
Storyboard.Completedでいけました。

355:デフォルトの名無しさん
13/02/20 20:50:24.50
DataGridのヘッダーと一行目を同じデザインにしたいんですが、
デフォルトのヘッダーデザインってどこで設定されているのでしょうか・・・

356:デフォルトの名無しさん
13/02/20 21:22:43.31
>>350-352
スタックトレースをみたら、なぜかローカルパスのxamlが記述されていました。
どういう意図でこうなったかはわかりませんが、これのせいだと思われます。

357:デフォルトの名無しさん
13/02/20 22:51:50.08
思われますって、それは誰かに投げてるのか、それとも解決なのか
なんかもうシラネェ…

358:デフォルトの名無しさん
13/02/21 00:08:59.56
>>356
もう最小構成で試せば?そっから徐々に追加していく感じで。
ビルドオプションとか怪しいと思うけど、WPFの糞仕様が原因っていうのもなきにしもあらず

359:デフォルトの名無しさん
13/02/21 18:36:35.76
WPFはmonoで動きますか?

360:デフォルトの名無しさん
13/02/21 18:45:56.67
動きません
あんなものサポートする気はないと明言されています

361:デフォルトの名無しさん
13/02/21 18:52:49.63
ありがとうございます
WPFという地雷を回避できて助かりました

362:デフォルトの名無しさん
13/02/21 19:08:50.04
地雷とかマイクロソフトに失礼だろ、せめて不発弾と呼べよ

363:デフォルトの名無しさん
13/02/22 01:43:08.33
せめてFormでDropshadow Effectだけはサポートしてくれんかな~・・・
WindowsFormsHostはレイヤーウィンドウサポートしてないからどうしようもない

364:デフォルトの名無しさん
13/02/22 02:46:32.95
ぶっちゃけ.NET普及の最大の阻害要因は
GUIフレームワークの不出来のせいだと思う

365:デフォルトの名無しさん
13/02/22 03:22:14.47
WinFormsは無茶苦茶普及してるでしょ
一から始めたプラットフォームとしてはとんでもない大成功と言っていいレベル

366:デフォルトの名無しさん
13/02/22 08:11:35.32
まあ、分野によって使われ具合にかなりムラがあると思うけど、
一番ネックになったのは、やっぱり中間言語形式と実行速度でしょ

367:デフォルトの名無しさん
13/02/22 08:25:05.14
俺的には初回起動時のコンパイルだけなんとかなればいいんだけどなー
新しいウィンドウ開くたびにコンパイルされるのが苦痛

368:デフォルトの名無しさん
13/02/22 09:20:13.96
よく勘違いされるが初回起動時に時間がかかるのはコンパイルじゃなくてハードディスクからのライブラリの読み込み
SSDで速くなるのがその証拠

369:デフォルトの名無しさん
13/02/22 09:24:31.29
マジで?

370:デフォルトの名無しさん
13/02/22 09:34:22.42
>>369
URLリンク(msdn.microsoft.com)
ためになるから読んどけ

371:デフォルトの名無しさん
13/02/22 09:45:23.22
>>370
サンクス。まあSSDで速くなるなら気にしない。
どうせそのうちみんなSSDになるだろうしね。

372:デフォルトの名無しさん
13/02/22 09:56:41.12
>>370
モダンアプリも起動遅いんだよなー。あの遅さはどこからくるのか( ´Д`)y━・~~

373:デフォルトの名無しさん
13/02/22 10:23:55.56
ストアの起動が遅いよな

374:デフォルトの名無しさん
13/02/22 11:38:51.45
>>372
つーか、機能最小限のアプリのくせして、これまでの.Netアプリと比べて
はるかに遅いように思うんだが

375:デフォルトの名無しさん
13/02/22 11:56:46.59
>>374
うむ、なんか.NETより遅いね。
なにが原因なのか知りたいところ( ´Д`)y━・~~

376:デフォルトの名無しさん
13/02/22 13:13:26.10
グラボ強化したらどうよ

377:デフォルトの名無しさん
13/02/22 13:27:56.21
Modelクラスがあるプロパティを、RaisePropertyChangedで、View(XAML)ではなくて、VMに通知することってできるんでしょうか

そのプロパティは、表示させる場合、かなり分岐が必要ですが、そのロジックはビジネスロジックじゃないので、Modelに書きたくないんです

378:377
13/02/22 13:45:57.64
要は、Modelのあるプロパティが更新されるたびに、ViewModelのあるイベントなりメソッドが呼び出されるようにしたいんです

一番楽なのは、ModelにViewModelの参照を持たせて、プロパティのsetで毎回呼び出すことですが

379:デフォルトの名無しさん
13/02/22 14:28:13.57
MVVMイラネって思ってるからフツーどうやるか知らないが、
VMにハンドラ書いて、通知されてきた名前と値でリフレクションでVMのプロパティ取得して、
ブチ込むじゃダメなの?デフォはargsに値持ってないけど

380:377
13/02/22 17:06:31.60
ありがとうございます
それでできそうです

381:デフォルトの名無しさん
13/02/22 20:54:59.01
タイトルバーの自作をしたいんですが、SystemCommandの復元と最大化の表示非表示の処理ってどうするのが無難なのでしょうか?
勝手にやってくれるのかと思ったけど、そうでもなかったです

382:デフォルトの名無しさん
13/02/22 21:12:29.11
>>377
普通にイベントでよくね?

383:デフォルトの名無しさん
13/02/22 23:58:35.92
ListViewのAllowDropをtrueにして文字列のドロップだけを受け取ろうとしたのですが
文字列以外のデータのときにDragEnterでEffectsをNoneにしても
アイテムをドラッグしたときのカーソルが禁止マークにならず
ドロップするとDropイベントが発生してしまいます
どうすれば任意の種類のデータ以外のドロップを禁止できますか?

384:デフォルトの名無しさん
13/02/23 00:26:49.59
普通にやったらそうはならないから変なことをしてるんだろう
あとは実は本当にドロップされたのに文字列データも含まれてたか

385:383
13/02/23 11:01:33.62
ウィンドウにListViewをおいて
AllowDropをtrueにしてDragEnterとDropイベントのハンドラを追加して
DragEnterでEffectsをNoneにするだけでも再現するんですが
なにか足りてなかったり勘違いしていたりしていますか?

386:デフォルトの名無しさん
13/02/23 12:18:40.62
e.Handles=true

387:デフォルトの名無しさん
13/02/23 12:43:35.23
wpf DragEnter Effects None でググれ

388:383
13/02/23 14:33:20.34
>>386
>>387
ありがとうございます。e.Handled=true が必要だったんですね

389:デフォルトの名無しさん
13/02/26 10:34:20.73
WPFではPrismやLivetなんかのGUIフレームワークが色々ありますが、
Windows Form向けのはあまり聞かないのは何でですかね?

390:デフォルトの名無しさん
13/02/26 10:40:51.64
WinForms向けのもいろいろあるぞ
WPFは一部の奴の声がでかいだけ

391:デフォルトの名無しさん
13/02/26 22:13:10.04
3つプロパティを持つModelクラスをListにいれて、3列からなるDataGridののItemSourceに指定しました。
各列のBindingにプロパティを指定して、列とプロパティが1:1で対応しています。

ただ、このModelクラスのプロパティは、2つは文字列型なんですが、もうひとつは列挙型であり、
その列挙型を文字列に変換するロジックが必要なんですが、
それはビジネスロジックではなくて、プレゼンテーションロジックなので、そのModelクラスには書きたくないです。

で、どこに書けばいいんでしょうか?

DataGridの特定のColumnだけバインディングソースを変えられることは可能なんでしょうか
(具体的にいうと、2列は前述のModelクラスのプロパティで、残り1列はVMクラスのプロパティをバインドしたいんです)

ItemSourceにModelクラスを指定しつつ、バインディングはModelクラスとVMクラスにするってことですが・・・

392:デフォルトの名無しさん
13/02/26 22:16:10.55
List型の依存関係プロパティの実装方法って普通のStringの依存関係プロパティとかと異なるのでしょうか?

393:デフォルトの名無しさん
13/02/26 22:25:28.97
>>391
IValueConverter書けばいいやん

394:デフォルトの名無しさん
13/02/26 22:35:27.40
相談させてください。

<ScrollViewer Name="scroll">
<Image name="img" Source="***"/>
</ScrollViewer>

スクロールビューアに画像を入れてて、画像にエフェクトをかけたいのですが、
img.Effect = 自作エフェクト;
とすると、画像が非常に大きいためスクロールが遅くなってしまいます。

scroll.Effect = 自作エフェクト;
とすると、スクロール自体は遅くならないのですが、バーの部分にまでエフェクトがかかってしまいます。

画像にだけエフェクトをかけるよい方法はありますか?

395:デフォルトの名無しさん
13/02/26 23:03:31.01
>>394
<ScrollViewer.Resources>
&nbsp; <Style TargetType="{x:Type ScrollContentPresenter}">
&nbsp; &nbsp; <Setter Property="Effect">
&nbsp; &nbsp; &nbsp; <Setter.Value>
&nbsp; &nbsp; &nbsp; &nbsp; <BlurEffect Radius="9"/>
こんな感じでScrollContentPresenterにエフェクト掛けるとか

396:デフォルトの名無しさん
13/02/26 23:03:53.91
>>391
普通はVMでもとのデータから表示用に変換した物にバインドするだろ

397:デフォルトの名無しさん
13/02/26 23:35:35.14
>>393
検討してみます

>>396
Model → ViewModel → View となっていて、

ModelにDataGridの列用のプロパティA・B・Cがあったら、ViewModelにもそれをラップしたのプロパティA・B・Cを作り、
ItemSourceにはViewModel内のList(もしくはObservalCollectionとか)を用意するわけですか?

398:デフォルトの名無しさん
13/02/26 23:40:57.89
>>395
ありがとうございます
試してみましたが、画像にかけたときと同じくらいの重さで駄目でした

399:デフォルトの名無しさん
13/02/27 12:09:12.08
>>389
なくてもあまり困らないから・・・なき駕する。

400:デフォルトの名無しさん
13/02/27 14:08:31.39
WPFでも別に無くても困らないよ
ただWPFの本来の使い方というのは少しWinFormsに比べてフレームワーク色が強く、
そこを理解する前に一部の声のでかい連中によってWPF=MVVMなどという刷り込みがなされてしまっている

401:デフォルトの名無しさん
13/02/27 14:10:19.48
つまり本来の使い方とは違う使い方で使おうとしているから変なフレームワークが必要になるってことだ

402:デフォルトの名無しさん
13/02/27 14:20:50.49
MVVMは要らない

403:デフォルトの名無しさん
13/02/27 14:25:18.76
MVVMが要らないプログラムってのは、まずWinFormsを検討するべき

404:デフォルトの名無しさん
13/02/27 14:46:08.90
MVVMが有効で無いってのはお絵描きアプリとかの特殊な物しか無いだろ。
お絵描きアプリにしてもUIとデータ構造がより密接に関係してくるだけで本質的にはMVVMが有効。
それが出来ないのは無能だからだろ

405:デフォルトの名無しさん
13/02/27 14:49:54.84
MVVMは大衆に受け入れられないと思う

406:デフォルトの名無しさん
13/02/27 16:07:09.48
有効はいいから実践的でおおーっていうソースを示してくれませんかねぇ
見たことがない。これがベストだ!この方法以外にない!っていう説得力があるソース

ソースって記事とかじゃないよ

407:デフォルトの名無しさん
13/02/27 17:31:13.20
MVVMにしないでユニットテスタブルにするいい方法あるなら教えてくれ(´・ω・`)
それがMVPでもMVCでもいいけどXAMLならMVVMじゃねーの

408:デフォルトの名無しさん
13/02/27 17:34:21.03
XAMLには極力何も書かないのがいい

409:デフォルトの名無しさん
13/02/27 18:36:52.61
MVVMだけでなんでもできたら普及するんだがなぁ

410:デフォルトの名無しさん
13/02/27 20:20:13.99
winformsでMVVMをやったらいいんじゃない

411:デフォルトの名無しさん
13/02/27 20:39:56.31
Behavior、Action、添付ビヘイビア。色々と足りなすぎる。
色々な追加機能があれば十分な機能とユニットテスタブルを両立できるが、
そこに辿り着くまでが長すぎる。辿り着けば有効ではあるが、できるのは1割もいない。
結局はMVVMで作ってマウスぽちぽちユニットテストしている奴が多いw

412:デフォルトの名無しさん
13/02/27 20:50:17.16
そんなスゲーなら標準ですべて機能提供しろよアホカ

413:デフォルトの名無しさん
13/02/28 00:20:01.29
MVVMとは離れてしまうかもしれませんが・・・

同期処理で、Windows.showDiaglogで表示した別ウィンドウが閉じられてから処理を動かす方法ってわかりますか?

414:デフォルトの名無しさん
13/02/28 00:25:36.58
ShowDialogの次の行に書け

415:デフォルトの名無しさん
13/02/28 00:36:53.53
>>413
Messengerパターンとかじゃなくて?

>>414
容赦ないなw

416:デフォルトの名無しさん
13/02/28 00:55:17.17
>>414
すいません、それで解決しました・・・
なんかWinformの知識でしたね・・・

>>415
深読みさせてしまいすいません

417:デフォルトの名無しさん
13/02/28 21:26:29.72
jqueryみたいなダイアログを出したいんだけど、なんか( ・∀・)イイ!!方法ない?

418:デフォルトの名無しさん
13/02/28 21:28:26.67
jQueryにダイアログなんかねえよ
何のプラグインか言え

419:デフォルトの名無しさん
13/02/28 21:29:29.44
jqueryみたいなってjQueryUIとか?jQueryとだけ言われてもな

420:デフォルトの名無しさん
13/02/28 21:29:55.95
おっとリロードすべきだった

421:デフォルトの名無しさん
13/02/28 21:31:04.36
webで表現できてXAMLにできないデザインなんかなさそうだが

422:デフォルトの名無しさん
13/02/28 22:14:54.98
jQueryUIでした。
モーダルダイアログっぽいけど、親ウィンドウの操作(移動、最小化とか)は出来る感じです

423:デフォルトの名無しさん
13/03/01 10:21:39.64
カスタムコントロール化すればいいだけじゃね

424:デフォルトの名無しさん
13/03/02 18:04:58.86
モーダルダイアログを出しておいて、裏の画面の移動とかできるようにするにはどうすればいいのでしょうか?

425:デフォルトの名無しさん
13/03/02 18:14:35.00
モーダルダイアログに裏の画面を移動させるボタンをつける

426:デフォルトの名無しさん
13/03/02 19:40:38.45
モーダルの意味が解ってないようだねw

427:デフォルトの名無しさん
13/03/02 19:42:18.18
というかダイアログを出してる間は裏の処理を止めたいんです

428:デフォルトの名無しさん
13/03/02 19:43:43.42
結局おまえは何をやりたいんだと

429:デフォルトの名無しさん
13/03/02 19:44:21.64
>>427
モーダルダイアログに裏の処理を止めるボタンをつける

430:デフォルトの名無しさん
13/03/02 19:48:27.09
意味が解らない

Hoge.Pause();
var result=○○.ShowDialog();
Hoge.Start();

431:デフォルトの名無しさん
13/03/02 19:55:07.62
違うよ
モーダルダイアログって出してる間は出し元の処理って止まるじゃん
それをモーダルダイアログを出さないで、実装したいんです

432:デフォルトの名無しさん
13/03/02 19:56:49.21
質問者すり替わった?

433:デフォルトの名無しさん
13/03/02 21:15:35.96
お前はダイアログ出したいのか出したくないのかまずはっきりさせろ

434:デフォルトの名無しさん
13/03/02 21:40:55.77
通常のモーダルダイアログは出したくない
jQueryUIのダイアログみたいな感じのダイアログを出したい
jQueryUIのダイアログみたいな感じのダイアログはユーザーコントロールとして作成しましたが、
こいつを出してる間にモーダルダイアログを出している時のように裏の処理を止めたい

こういうことです

435:デフォルトの名無しさん
13/03/02 22:00:03.29
そこまではOKだ
次に、裏の処理とは具体的に何か

436:デフォルトの名無しさん
13/03/02 22:04:44.03
モーダルダイアログを表示したあとは、そのダイアログが閉じられない限り、ShowDialogの下に処理が流れませんよね
あれを実現したいのです。

437:デフォルトの名無しさん
13/03/02 22:16:37.68
ダイアログでいいじゃん(´・ω・`) 

438:デフォルトの名無しさん
13/03/02 22:17:57.06
モードレスダイアログにしてClosedに

Window.Closed += (s,e)=>{
後処理
};

とか書いとけばええんでない

439:デフォルトの名無しさん
13/03/02 22:24:33.93
見た目の問題ならウィンドウの枠消せばいいだけじゃないの
webページみたいにウィンドウ内で疑似的にダイアログっぽいものを表示したいってことか?
あれはウィンドウの要素ツリーを弄って強引に実装する
ウィンドウの最前面にサイズ無限大の半透明Canvasを表示してイベントを妨害し、
その上にダイアログっぽいコントロールを置く
SilverlightのChildWindowはそうやってた

440:439
13/03/02 22:29:58.11
ところでSilverlightのChildWindowは親ウィンドウの構造に依存しないで表示する必要があるから
動的にCanvasを追加したりしてるけど、ダイアログもどきを表示する前提で親ウィンドウも含めて設計するなら
親ウィンドウの最前面にダイアログを表示するためのレイヤを最初から仕込んでおいて
ダイアログを表示するときまで隠しとけばいい

441:デフォルトの名無しさん
13/03/02 22:32:35.11
>>438
そうするしかないんですかね
見づらくなるのはしょうがないか

>>439
そんな感じで実装しました
タブで後ろのコントロールにフォーカスが移ってしまうのを制御するのが面倒でした

442:デフォルトの名無しさん
13/03/02 22:35:43.31
>>441
フォーカスは親のコンテンツをまとめたパネルのIsEnabledをFalseにするだけでできるでしょ

443:デフォルトの名無しさん
13/03/02 22:36:25.34
>>442
なるほど!
あなた、頭いいですね

444:デフォルトの名無しさん
13/03/02 22:41:54.82
あ?

445:デフォルトの名無しさん
13/03/02 22:50:28.75
よせよ、解決したんなら平和に終わろうぜ

446:デフォルトの名無しさん
13/03/02 23:09:48.37
IsEnabled変えたら見た目も変わっちゃうじゃないか

447:デフォルトの名無しさん
13/03/02 23:17:02.95
むしろ変えないと不親切だろわかりにくい
ついでにアニメーションで暗くすればかっこいいしもっとわかりやすい

448:デフォルトの名無しさん
13/03/02 23:48:11.90
よく理解してないけど
Window.ShowDialog()でいいんじゃないの?

449:デフォルトの名無しさん
13/03/02 23:53:08.58
じゃあ喋るな

450:デフォルトの名無しさん
13/03/02 23:57:25.97
VB.NET/XAMLでDictionaryの要素をバインドしようとしてますが、うまくいきません

XAML上では次の様に記述してます
ItemsSource="{Binding バインドしたいDictionary[key文字列]}"

これで実行するとバックグラウンドでBindingが失敗してる旨のメッセージが表示されます
XAMLでDictionaryのValueをバインドするのはこの方法でいいんでしょうか?
その方法でいけますよって書かれてるページ(StackOverflowの投稿)があって、それ見ながらやってみたら出来ないので困ってます

451:デフォルトの名無しさん
13/03/02 23:58:15.07
いや、行けません

452:450
13/03/03 00:01:27.26
>>451
いけませんか
正しい記述を教えていただけると助かります

453:デフォルトの名無しさん
13/03/03 00:48:20.23
ItemsSource=new binding(ムニャムニャ)

454:450
13/03/03 00:58:28.56
>>453
ありがとうございます、コードビハインドでの方法も試しましたが駄目でした
ItemsSourceに直接ぶちこむならいけるんですけどね・・・
一応コレクションの参照が変わる事は無いのでそれでもいいっちゃいいんですが・・・
解決したいのでもうちょい調べてみます

455:450
13/03/03 01:08:55.22
解決しました
原因はDataContextでした
今回のComboはDataGridColumnHeader内に組み込んだコンボなんですが
ルート要素のDataContextに持たせていたのでスコープは通ると思ってたんですが
DataGridがDataGridColumnHeaderのDataContextを勝手にGridで上書きしていた為
スコープが通らなくなってました
とりあえずComboBoxに直接DataContextを改めてコードビハインドで与えてみると、解決しました
>>453さんのヒントでコードビハインドに目を向けた事で一気に事が進みました
ありがとうございます

456:デフォルトの名無しさん
13/03/03 20:31:43.20
ちょっと断片的なんだけど、これを見てくれ
URLリンク(pastebin.com)

以下のエラーが出る
・CLR 名前空間が定義されていません。'clr-namespace' URI が参照している名前空間 'System.ComponentModel' が見つかりません。
・型 'scm:SortDescription' が見つかりませんでした。アセンブリ参照が失われていないか、また、すべての参照アセンブリがビルドされているかどうかを確認してください。

しかしオブジェクトブラウザやソリューションエクスプローラ見る限り参照されてるし
デザイナの表示にしろ実行時にしろ問題は何もない(ちゃんとソートされたCollectionViewになっている)

でもエラーが消えないのは腹が立つので
どうにかして消せないだろうか

457:デフォルトの名無しさん
13/03/03 20:35:04.51
すまぬVS2012のバグらしい
URLリンク(connect.microsoft.com)

直るまでは無視することにする

458:デフォルトの名無しさん
13/03/03 20:43:09.67
またピンポイントに妙なバグだな
イミフ

459:デフォルトの名無しさん
13/03/04 00:55:31.70
名前:デフォルトの名無しさん[sage] 投稿日:2012/10/31(水) 17:13:25.24
C#の自動プロパティはViewとコードの分離のためだし
全部をコードビハインドで書いてる人には価値が分からないだろうな

460:デフォルトの名無しさん
13/03/05 00:23:33.89
いくつかのWindowsで全く似たような機能をもたせる場合(たとえばファイル選択ダイアログとか)、
VMを細切れにして、委譲させたりして、再利用させるのって普通なんですかね?

461:デフォルトの名無しさん
13/03/05 00:26:02.57
そういうのはMVVMの外でやる
インターフェイスでIoCやれ

462:デフォルトの名無しさん
13/03/05 10:02:13.34
然り然り


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch