探検
MVVMについて語ろう
■ このスレッドは過去ログ倉庫に格納されています
2012/06/06(水) 11:03:33.21
WPF/Silverlight/WinRT開発の必須技術、MVVMについて語ろうではないか!
340デフォルトの名無しさん
2012/10/14(日) 20:38:40.26341デフォルトの名無しさん
2012/10/16(火) 00:33:06.45 >>340
テンプレート使ったこと無いの?
サーバーでテンプレートに渡す値を
値そのまま渡せばそれがAjaxになる。
サーバーサイドアプリ - テンプレート処理
なのだから、確実にAjaxの方が簡単になってる。;
テンプレート使ったこと無いの?
サーバーでテンプレートに渡す値を
値そのまま渡せばそれがAjaxになる。
サーバーサイドアプリ - テンプレート処理
なのだから、確実にAjaxの方が簡単になってる。;
342デフォルトの名無しさん
2012/10/16(火) 01:04:33.51 意味がわからない
テンプレートって普通サーバーで使うもんだろ? クライアント側でテンプレート使うってこと?
それがサーバーでやるより簡単だと言える根拠は?
テンプレートって普通サーバーで使うもんだろ? クライアント側でテンプレート使うってこと?
それがサーバーでやるより簡単だと言える根拠は?
343デフォルトの名無しさん
2012/10/16(火) 01:11:23.92 どっちも簡単だろ。
jQueryみたいなライブラリが充実してきて笑えるぐらい簡単になった。
これが難しいってム板に居られる資質がないとしか思えん。
jQueryみたいなライブラリが充実してきて笑えるぐらい簡単になった。
これが難しいってム板に居られる資質がないとしか思えん。
344デフォルトの名無しさん
2012/10/16(火) 18:10:03.69 >>342
サーバの負荷の関係上、サーバでテンプレートエンジン使わない方がいいとかもあるんだけど、
最近は、サーバから戻ってくるのはJSONオブジェクトとテンプレートで、クライアントでテンプレート
エンジンかましてページを生成する方が良いような気がしてるよ。基本Ajaxで。
受けとったJSONオブジェクトを元に、自力でDOMを書き換えても良いし。
サーバの負荷の関係上、サーバでテンプレートエンジン使わない方がいいとかもあるんだけど、
最近は、サーバから戻ってくるのはJSONオブジェクトとテンプレートで、クライアントでテンプレート
エンジンかましてページを生成する方が良いような気がしてるよ。基本Ajaxで。
受けとったJSONオブジェクトを元に、自力でDOMを書き換えても良いし。
345デフォルトの名無しさん
2012/10/16(火) 20:40:35.72 クライアントが以前より負荷が高くなるという問題もあるけれど、
以前というのはもう十数年前だったら問題になるというレベルで
今はクライアントは十分な性能を持ってるしね。
ブラウザ自体も速くなった。
それに比べるとネットワークはまだまだ遅いわけで、
テンプレートはローカルにキャッシュしておいて
データ量を減らすほうが得策かな。
サーバー負荷も低くなるし。
これぐらいだれでも思っていることで、
普通サーバーでやるもんだろで終わってる人ってのは
何も考えてないとしか思えないけどw
以前というのはもう十数年前だったら問題になるというレベルで
今はクライアントは十分な性能を持ってるしね。
ブラウザ自体も速くなった。
それに比べるとネットワークはまだまだ遅いわけで、
テンプレートはローカルにキャッシュしておいて
データ量を減らすほうが得策かな。
サーバー負荷も低くなるし。
これぐらいだれでも思っていることで、
普通サーバーでやるもんだろで終わってる人ってのは
何も考えてないとしか思えないけどw
346デフォルトの名無しさん
2012/10/16(火) 20:43:20.12 一方Twitterは以前API直接たたいてJSONからDOM生成してたのが最近生成済みのhtml片を鯖から受け取るようになった
347デフォルトの名無しさん
2012/10/16(火) 21:07:29.77 完全なAjaxができるならいいが、
普通そうはいかないもんな
どうせサーバーで生成しなきゃいけないならなるべくサーバーにまとめちゃった方が楽
普通そうはいかないもんな
どうせサーバーで生成しなきゃいけないならなるべくサーバーにまとめちゃった方が楽
348デフォルトの名無しさん
2012/10/16(火) 21:18:45.66 どっちみちAjaxは使わないといけないんだから
クライアントにまとめちゃったほうが楽
クライアントにまとめちゃったほうが楽
349デフォルトの名無しさん
2012/10/16(火) 21:24:48.64 Ajaxはオプションだろ
利便性のためにクライアントでAjax使ってバリデーションしたとしても、
どのみちサーバーでもやらないといけない
利便性のためにクライアントでAjax使ってバリデーションしたとしても、
どのみちサーバーでもやらないといけない
350デフォルトの名無しさん
2012/10/16(火) 21:30:02.30 Ajaxはバリデーション以外で使うものって
わからないのか?w
バリデーションなら単なるJavaScriptで良い
わからないのか?w
バリデーションなら単なるJavaScriptで良い
351デフォルトの名無しさん
2012/10/16(火) 21:31:42.33352デフォルトの名無しさん
2012/10/16(火) 21:32:50.76 JavaScriptでバリデーションが通ったら
サーバーでは検証せずにそのままDBに入れちゃうの?
やばくねそれ
サーバーでは検証せずにそのままDBに入れちゃうの?
やばくねそれ
353デフォルトの名無しさん
2012/10/16(火) 21:34:43.44 話し理解できてないの?w
バリデーションをAjaxで行う=サーバーで通信して行うから、
そのバリデーションはサーバーでやってる事になるだろうって話だ。
あと、サーバーでやらないなんて一言も言ってない。
なんでこんなに文章読めないの?馬鹿なの?
バリデーションをAjaxで行う=サーバーで通信して行うから、
そのバリデーションはサーバーでやってる事になるだろうって話だ。
あと、サーバーでやらないなんて一言も言ってない。
なんでこんなに文章読めないの?馬鹿なの?
354デフォルトの名無しさん
2012/10/16(火) 21:36:01.79 サーバとJavaScript両方でバリデーションするの?
マジキチ?
マジキチ?
355デフォルトの名無しさん
2012/10/16(火) 21:36:16.18 >Ajaxはバリデーション以外で使うもの
>バリデーションなら単なるJavaScriptで良い
さっきと言ってることが180度違うけど
>バリデーションなら単なるJavaScriptで良い
さっきと言ってることが180度違うけど
356デフォルトの名無しさん
2012/10/16(火) 21:38:07.68 うーん?
> Ajaxはオプションだろ
>>349が
オプションでやるって書いてあるじゃん。
みんな最初っから、両方でやるという前提で話してるんだが。
両方でやるのは、レスポンスを早くしてユーザビリティを上げ
無駄な通信を削減するため。言わなくても常識だと思っているが。
> Ajaxはオプションだろ
>>349が
オプションでやるって書いてあるじゃん。
みんな最初っから、両方でやるという前提で話してるんだが。
両方でやるのは、レスポンスを早くしてユーザビリティを上げ
無駄な通信を削減するため。言わなくても常識だと思っているが。
357デフォルトの名無しさん
2012/10/16(火) 21:38:54.60 >>355
そりゃ、さっき言った人俺は別人だからねw
そりゃ、さっき言った人俺は別人だからねw
358デフォルトの名無しさん
2012/10/16(火) 21:40:19.92 みんなって誰?
マジキチは一人で十分なんだがw
マジキチは一人で十分なんだがw
359デフォルトの名無しさん
2012/10/16(火) 21:40:51.87 >>358
みんな=お前以外
みんな=お前以外
360デフォルトの名無しさん
2012/10/16(火) 21:41:02.38 ああ、別人という設定なんですね、わかります
361デフォルトの名無しさん
2012/10/16(火) 21:41:14.80 鯖とJS両方で検証するだろうよ
検証はカスタム属性から自動生成でもしたらいいってかそういうのすでにある
検証はカスタム属性から自動生成でもしたらいいってかそういうのすでにある
362デフォルトの名無しさん
2012/10/16(火) 21:43:13.41 一人だけ、程度の低い人が居ますね
363デフォルトの名無しさん
2012/10/16(火) 21:45:12.56 >>362
自己紹介は結構です
自己紹介は結構です
364デフォルトの名無しさん
2012/10/16(火) 21:58:42.34 今時Ajaxだるいと言って済ませられるような、簡単なお仕事をしているぬるま湯な環境うらやましす
コストをかけずにAjaxやJSでのMVVMをどう実現するか試行錯誤している人が多い中で
コストをかけずにAjaxやJSでのMVVMをどう実現するか試行錯誤している人が多い中で
365デフォルトの名無しさん
2012/10/16(火) 21:59:49.81 ×今時Ajax
○いまさらAjax
○いまさらAjax
366デフォルトの名無しさん
2012/10/16(火) 22:12:49.60 クライアントにまとめるとか言って鯖から全件投げつけてクライアント側で検索やらせる奴とかが現れませんように
367デフォルトの名無しさん
2012/10/16(火) 22:16:13.83368デフォルトの名無しさん
2012/10/16(火) 22:16:48.57 そのうちJavaScriptでクラサバやるわけですね
369デフォルトの名無しさん
2012/10/16(火) 22:17:15.76 node.js最強
370デフォルトの名無しさん
2012/10/16(火) 22:20:02.67 >>366
ASP.NET素人だとクライアント側にViewStateで全データを保管して、サーバー側でページングとか日常茶飯事だぜ?
ASP.NET素人だとクライアント側にViewStateで全データを保管して、サーバー側でページングとか日常茶飯事だぜ?
371デフォルトの名無しさん
2012/10/16(火) 22:22:07.06 まーた、なんか低レベルの流れになってんなー
372デフォルトの名無しさん
2012/10/16(火) 22:30:55.59 下見てもつまらないよ
373デフォルトの名無しさん
2012/10/17(水) 01:35:57.07 Random Ravings of a Red Headed Code Monkey: Knockout.js Added to the F#/C# MVC 4 Single Page Application Template
http://bloggemdano.blogspot.jp/2012/10/knockoutjs-added-to-fc-mvc-4-single.html
http://bloggemdano.blogspot.jp/2012/10/knockoutjs-added-to-fc-mvc-4-single.html
374デフォルトの名無しさん
2012/10/21(日) 22:42:39.14 なんか最近尾上の言うことがぶれすぎ
先月ぐらいから少しずつさりげなくぶれ始めてたんだが
なにがあったんだ?
コードビハインドとか頭おかしくなったのか?
その内容自体は宗教だからどうでもいいが
さんざん自分の考えと違うやつを罵倒してきた人間が
そこまでころっと価値観変えてどうなんだ?
先月ぐらいから少しずつさりげなくぶれ始めてたんだが
なにがあったんだ?
コードビハインドとか頭おかしくなったのか?
その内容自体は宗教だからどうでもいいが
さんざん自分の考えと違うやつを罵倒してきた人間が
そこまでころっと価値観変えてどうなんだ?
375デフォルトの名無しさん
2012/10/21(日) 22:56:05.22 コードビハインドを無理に排除しようとすると、どうしても
特定のビュー専用のビヘイビアがしばしば出てくる。
その場合無駄に煩雑になるだけで実質何のメリットもない。
彼も気付いちゃったんだよ。
特定のビュー専用のビヘイビアがしばしば出てくる。
その場合無駄に煩雑になるだけで実質何のメリットもない。
彼も気付いちゃったんだよ。
376デフォルトの名無しさん
2012/10/22(月) 06:04:37.89 単に自分の考えが甘かった、自分の見える世界だけしか見ていなかった事に気がついただけだろ。
ああいうキャラの人間はだいたいそんなもん。
ああいうキャラの人間はだいたいそんなもん。
377デフォルトの名無しさん
2012/10/22(月) 08:48:01.98 MVVMやっててWPFの仕組みがわかってくると、
意外とWPFのコードビハインドってよくできてることに気付くよね
正直、ビヘイビアは再利用できるものだけに限定して積極的にコードビハインド使うのがベストだと思う
意外とWPFのコードビハインドってよくできてることに気付くよね
正直、ビヘイビアは再利用できるものだけに限定して積極的にコードビハインド使うのがベストだと思う
378デフォルトの名無しさん
2012/10/22(月) 09:20:38.69 メッセージも多くの場合Vがインターフェイスを実装すれば十分
メモリリークガーとか言うけど、そんな大したことじゃないだろ。
参照管理の問題なんてどうせWPF関係ないところでも常に付きまとうのに、
それをコードビハインドの問題であるかのように大袈裟に騒いで、
WPFがまだよくわかってない人に変な先入観を植え付けている。
メモリリークガーとか言うけど、そんな大したことじゃないだろ。
参照管理の問題なんてどうせWPF関係ないところでも常に付きまとうのに、
それをコードビハインドの問題であるかのように大袈裟に騒いで、
WPFがまだよくわかってない人に変な先入観を植え付けている。
379デフォルトの名無しさん
2012/10/22(月) 09:41:07.23 MVVMというより、Blend至上主義みたいな話になっちゃってるような所があったからな。
380デフォルトの名無しさん
2012/10/22(月) 12:14:52.36 本人はBlendを第一に考えてるようだしその辺だろうな
381デフォルトの名無しさん
2012/10/24(水) 00:05:27.67 Blend 2012まだかよ
382デフォルトの名無しさん
2012/11/02(金) 12:07:46.01 ViewModelのインターフェイスって意味ある?
383デフォルトの名無しさん
2012/11/02(金) 14:00:24.51 Mや各種サービスからのコールバックに使うとか
コードビハインドでVからVMのメソッドを呼ぶときにV->VMを密結合させたくないとか
そういうときには意味ある
コードビハインドでVからVMのメソッドを呼ぶときにV->VMを密結合させたくないとか
そういうときには意味ある
384デフォルトの名無しさん
2012/11/02(金) 14:32:57.66 まあ通常は継承ベースでいいと思う
385デフォルトの名無しさん
2012/11/04(日) 22:35:06.98386デフォルトの名無しさん
2012/11/04(日) 22:49:04.80 Viewとみなすのがふつう
ビヘイビアもコードビハインドの一形態なので同じくView
ビヘイビアもコードビハインドの一形態なので同じくView
387デフォルトの名無しさん
2012/11/05(月) 20:21:18.14 結局
vmに置かれるviewに強く関係するけど
共通ロジックの置き場がない
vmに置かれるviewに強く関係するけど
共通ロジックの置き場がない
388デフォルトの名無しさん
2012/11/05(月) 23:16:15.79 共通ロジックならUTILとかに置けばいいだろ?
389デフォルトの名無しさん
2012/11/05(月) 23:36:53.45390デフォルトの名無しさん
2012/11/05(月) 23:38:49.26 >>389
ビューと不可分だから
ビューと不可分だから
391デフォルトの名無しさん
2012/11/05(月) 23:45:04.35392デフォルトの名無しさん
2012/11/05(月) 23:51:07.82 >>391
この場合の不可分は「単体テスト可能かどうか」な。
ユーザーコントロールやウィンドウのクラスに対してXAMLを差し替えることは普通はできないし
無理矢理読み込むファイルを変えたとしてもコードビハインドからコントロールを直接触ってるから
結局ビューを表示して実際に操作してみないとテストできないわけ。
だからコードをビューから分離してビューなしでテストできるようにしましょうっていうのがVM。
この場合の不可分は「単体テスト可能かどうか」な。
ユーザーコントロールやウィンドウのクラスに対してXAMLを差し替えることは普通はできないし
無理矢理読み込むファイルを変えたとしてもコードビハインドからコントロールを直接触ってるから
結局ビューを表示して実際に操作してみないとテストできないわけ。
だからコードをビューから分離してビューなしでテストできるようにしましょうっていうのがVM。
393デフォルトの名無しさん
2012/11/06(火) 00:03:14.09 >>392
なるほどねー
なるほどねー
394デフォルトの名無しさん
2012/11/06(火) 00:05:46.84 >>387
ViewModelsってフォルダにそういう機能のクラスを作ればええんや
まーそもそも、Views、ViewModels、Modelsってフォルダ群もなんだかなーって気もするが
そのほかのフォルダ構成でやってるやつおる?
ViewModelsってフォルダにそういう機能のクラスを作ればええんや
まーそもそも、Views、ViewModels、Modelsってフォルダ群もなんだかなーって気もするが
そのほかのフォルダ構成でやってるやつおる?
395デフォルトの名無しさん
2012/11/06(火) 03:50:39.94 フォルダ分けない方が楽な気はするがその3つにしてるな
396デフォルトの名無しさん
2012/11/06(火) 15:16:09.04 М氏も「MVVM=コードビハインド無し」みたいな誤解撒き散らしてたし
「フルMVVM」って造語が誤解生んだのも事実
でもだからなんなの?勝手に誤解してずっこけたの本人のせいじゃん
お前が元信者だから裏切られた感強いだけだろ
「フルMVVM」って造語が誤解生んだのも事実
でもだからなんなの?勝手に誤解してずっこけたの本人のせいじゃん
お前が元信者だから裏切られた感強いだけだろ
397デフォルトの名無しさん
2012/11/06(火) 16:34:58.61 dynamicを積極的に使うのはどうだろう
VMがdynamic型でVへの参照を保持して動的にVのメソッドを呼ぶようにすれば、
メッセージやインターフェイスを介さなくてもVM->Vの密結合が避けられる。
dynamicなら完全に透過的なプロキシが使えるから、たとえばメモリリークの恐れがある箇所は
WeakReferenceでビューへの参照を持ち、ビューがGCされたらnullオブジェクトとして振る舞う
ようなプロキシを利用すれば、メモリリークの問題もコードの見た目を全く汚さずに解決。
型無しがダメだというならメッセージだって同じようなもんだよね。
(Vが当該メッセージをサポートしているかどうかはコンパイル時にチェックされないという意味で)
VMがdynamic型でVへの参照を保持して動的にVのメソッドを呼ぶようにすれば、
メッセージやインターフェイスを介さなくてもVM->Vの密結合が避けられる。
dynamicなら完全に透過的なプロキシが使えるから、たとえばメモリリークの恐れがある箇所は
WeakReferenceでビューへの参照を持ち、ビューがGCされたらnullオブジェクトとして振る舞う
ようなプロキシを利用すれば、メモリリークの問題もコードの見た目を全く汚さずに解決。
型無しがダメだというならメッセージだって同じようなもんだよね。
(Vが当該メッセージをサポートしているかどうかはコンパイル時にチェックされないという意味で)
398デフォルトの名無しさん
2012/11/06(火) 17:03:56.14 マルチキャストが必要な場合(メモリリークを避けるためにイベントを置き換えるとき)もこんな感じで
class HogeModel {
//弱参照で複数のリスナへの参照を持つ複合プロキシ
private WeakCompositeProxy listeners;
public void AddListener(dynamic listener) { listeners.Add(listener); }
private void RaiseSomethingHappened() {
//登録された全てのリスナのOnSomethingHappenedメソッドを呼び出す
//リスナがOnSomethingHappenedメソッドを持たない場合は何もしない
((dynamic)listeners).OnSomethingHappened();
}
}
class HogeModel {
//弱参照で複数のリスナへの参照を持つ複合プロキシ
private WeakCompositeProxy listeners;
public void AddListener(dynamic listener) { listeners.Add(listener); }
private void RaiseSomethingHappened() {
//登録された全てのリスナのOnSomethingHappenedメソッドを呼び出す
//リスナがOnSomethingHappenedメソッドを持たない場合は何もしない
((dynamic)listeners).OnSomethingHappened();
}
}
399デフォルトの名無しさん
2012/11/09(金) 04:16:24.83 MVVMってメトロになってもやること変わらんの?
技術的にはあっちが本流だと思うんだけど
技術的にはあっちが本流だと思うんだけど
400デフォルトの名無しさん
2012/11/09(金) 09:11:57.38 どうしてデザパタが環境によって変化すると思うんだw 技術じゃないぜ。概念だろ。
401デフォルトの名無しさん
2012/11/09(金) 10:13:41.46 この手の概念って「ある一定の規則とか法則に名前をつける」
だけの話だからね。
だけの話だからね。
402デフォルトの名無しさん
2012/11/09(金) 11:31:24.11 コーディング段階は結構変わるがな
403デフォルトの名無しさん
2012/11/09(金) 22:45:20.26404デフォルトの名無しさん
2012/11/11(日) 00:32:37.19 すいません、よかったら教えてください
MVVM Light Toolkitで遊んでるんですが、テンプレートから作成されるModelの
IDataServiceのメソッドがActionを渡して結果をコールバックさせる形になっています
普通に戻り値や例外を返せばいいと思うのですが、あえてコールバックさせているのはなぜなんでしょう?
考えても理由がちっとも思いつかないので、もしわかったらお教えください
よろしくお願いします
MVVM Light Toolkitで遊んでるんですが、テンプレートから作成されるModelの
IDataServiceのメソッドがActionを渡して結果をコールバックさせる形になっています
普通に戻り値や例外を返せばいいと思うのですが、あえてコールバックさせているのはなぜなんでしょう?
考えても理由がちっとも思いつかないので、もしわかったらお教えください
よろしくお願いします
405デフォルトの名無しさん
2012/11/11(日) 00:36:08.24 >>401
MVVM以前からMVVM的な物が存在していたということ?
MVVM以前からMVVM的な物が存在していたということ?
406デフォルトの名無しさん
2012/11/11(日) 00:40:40.06 >>404
処理に時間がかかる場合にGUIが固まるのを防ぐためだろ
Webからデータを取ってくるような場合は言うまでもないが、
ローカルなファイルやデータベースからちょっと取ってくるくらいでも結構固まる
処理に時間がかかる場合にGUIが固まるのを防ぐためだろ
Webからデータを取ってくるような場合は言うまでもないが、
ローカルなファイルやデータベースからちょっと取ってくるくらいでも結構固まる
407デフォルトの名無しさん
2012/11/11(日) 00:53:11.62 >>406
それはasync、awaitの非同期処理はModel内部で行ってServiceのメソッドをasync宣言しない方がよい
ということでしょうか?
Serviceのメソッド自体が非同期メソッドであれば画面が固まったりしないですよね?
そこら辺も初めてさわったのでトンチンカンなこと言ってたらすいません
それはasync、awaitの非同期処理はModel内部で行ってServiceのメソッドをasync宣言しない方がよい
ということでしょうか?
Serviceのメソッド自体が非同期メソッドであれば画面が固まったりしないですよね?
そこら辺も初めてさわったのでトンチンカンなこと言ってたらすいません
408406
2012/11/11(日) 00:56:51.28 あ、MVVM Light Toolkitは別にasync、awaitのサポート環境を限定してないからかな?
逆にいうとasync、awaitが使える環境ならば別にコールバックさせる必要はないってことでいいんでしょうか??
逆にいうとasync、awaitが使える環境ならば別にコールバックさせる必要はないってことでいいんでしょうか??
409デフォルトの名無しさん
2012/11/11(日) 00:57:16.17 >>407
いやMVVM Light Toolkitは結構昔からあって、当時はasyncが無かっただけ
U氏はasyncは内部で使うものであってインターフェイスに使うなとか
思い込みだけで頓珍漢なことを言ってたが
今からasync前提で作るなら普通に使っていいよ
いやMVVM Light Toolkitは結構昔からあって、当時はasyncが無かっただけ
U氏はasyncは内部で使うものであってインターフェイスに使うなとか
思い込みだけで頓珍漢なことを言ってたが
今からasync前提で作るなら普通に使っていいよ
410406
2012/11/11(日) 01:01:22.02411デフォルトの名無しさん
2012/11/12(月) 00:22:58.42412デフォルトの名無しさん
2012/11/12(月) 20:04:14.60 MVVMでユーザコントロール使う場合のお作法?で質問があります
Page内に異なるユーザコントロールが2種類AとBがあります
Aはリストを表示するコントロールでBはその明細を表示するコントロールです
AとBにはそれぞれ専用のVMを作ってバインドしています
この時、A内のリストで選択されたものをBに渡したいのですがどう実装するのがスマートなんでしょうか?
現在は、PageのVMの中にAVMとBVMを保持していて、AVMのPropertyChangedイベント
をPageのVMの中で拾ってBVMのプロパティに設定しています
が・・・なんかいまいち感が
他にいいアイディアってあるのでしょうか?
Page内に異なるユーザコントロールが2種類AとBがあります
Aはリストを表示するコントロールでBはその明細を表示するコントロールです
AとBにはそれぞれ専用のVMを作ってバインドしています
この時、A内のリストで選択されたものをBに渡したいのですがどう実装するのがスマートなんでしょうか?
現在は、PageのVMの中にAVMとBVMを保持していて、AVMのPropertyChangedイベント
をPageのVMの中で拾ってBVMのプロパティに設定しています
が・・・なんかいまいち感が
他にいいアイディアってあるのでしょうか?
413デフォルトの名無しさん
2012/11/12(月) 20:12:25.87 ListBoxのItemsSourceにVMたくさん入ったコレクションセットして
ContentControlのContentか任意のViewコントロールのDataContextにListBoxのSelectedItemをバインドするのが楽じゃね
ContentControlのContentか任意のViewコントロールのDataContextにListBoxのSelectedItemをバインドするのが楽じゃね
414デフォルトの名無しさん
2012/11/12(月) 21:01:20.01 あぁそっか、そういうやり方があるんですね
勉強になります
ありがとうございました
もしよかったらもう一つ教えてください
実はAで選択されたItemをまた別のコントロールに今度は単一を設定するのではなくて
どんどん追加もしたいんですが・・・
そういう場合はどうするのが良いのでしょうか?
一つ一つの機能は徐々にわかってきたんですが、合わせ技になると発想がついてこないっす
勉強になります
ありがとうございました
もしよかったらもう一つ教えてください
実はAで選択されたItemをまた別のコントロールに今度は単一を設定するのではなくて
どんどん追加もしたいんですが・・・
そういう場合はどうするのが良いのでしょうか?
一つ一つの機能は徐々にわかってきたんですが、合わせ技になると発想がついてこないっす
415デフォルトの名無しさん
2012/11/12(月) 21:01:56.33 SelectedItemは同意だけど、VM自体はPage用1つだけでいいと思う
「AB両方の表示用を子プロパティとして持つクラス」のコレクションを
VMがプロパティとして公開して、Aがそれにバインド、
BがAのSelectedItemにバインド、が一番すっきりかな
「AB両方の表示用を子プロパティとして持つクラス」のコレクションを
VMがプロパティとして公開して、Aがそれにバインド、
BがAのSelectedItemにバインド、が一番すっきりかな
416デフォルトの名無しさん
2012/11/12(月) 21:14:21.92 >>415
なるほど、そういうやり方もあるのか
そこで一つ疑問が出てきてしまったんですが・・・
WebでMVVMのユーザコントロールのサンプルをいくつか見たところ
たまたま?すべてのサンプルがユーザコントロール毎に定義されていて
それを鵜呑みにしてたんですが・・・
親になるビューだけがVMを持つのとコントロールも独自にVMを持つケース
どういった感じで使い分けたらいいのでしょうか?
ちなみに今回の場合、AもBも表示するだけではなくて、それなりに個々の
コントロールに機能を持っています
Aはソート順を変えたり絞り込んだり、Bは詳細を編集したりなどです
なるほど、そういうやり方もあるのか
そこで一つ疑問が出てきてしまったんですが・・・
WebでMVVMのユーザコントロールのサンプルをいくつか見たところ
たまたま?すべてのサンプルがユーザコントロール毎に定義されていて
それを鵜呑みにしてたんですが・・・
親になるビューだけがVMを持つのとコントロールも独自にVMを持つケース
どういった感じで使い分けたらいいのでしょうか?
ちなみに今回の場合、AもBも表示するだけではなくて、それなりに個々の
コントロールに機能を持っています
Aはソート順を変えたり絞り込んだり、Bは詳細を編集したりなどです
417デフォルトの名無しさん
2012/11/12(月) 23:25:58.38 >>416
俺は複数のWindowでControl使いまわしてるから、Controlに専用のViewModel持たせてるよ
俺は複数のWindowでControl使いまわしてるから、Controlに専用のViewModel持たせてるよ
418デフォルトの名無しさん
2012/11/13(火) 00:54:12.58 Model側でコレクションを持つ場合、そのVMも子ModelのVMのコレクションを持つようにしてるかな
この場合Model側もObservableCollection的な通知機能付コレクションを使うことになるが
子ModelがVM持つほどの意義がない場合は親Modelのコレクションそのまま使ったりもする
この場合Model側もObservableCollection的な通知機能付コレクションを使うことになるが
子ModelがVM持つほどの意義がない場合は親Modelのコレクションそのまま使ったりもする
419デフォルトの名無しさん
2012/11/13(火) 04:42:27.67 414は単純に、「別のコントロール」側のItemsSourceになってるコレクションに
Addしてやればいいだけだと思う…
単純過ぎるので質問の意味取り違えてるかも知れないけど
416についてはケースバイケース
どうするのが、開発や保守しやすいか。それ次第でしょう
Addしてやればいいだけだと思う…
単純過ぎるので質問の意味取り違えてるかも知れないけど
416についてはケースバイケース
どうするのが、開発や保守しやすいか。それ次第でしょう
420414
2012/11/13(火) 20:36:52.73421デフォルトの名無しさん
2012/11/13(火) 20:43:05.86 >>419
1. ItemSourceになっているコレクションに誰が値を入れるべきか?
2. ItemSourceは誰が持つべきか?
の2点で悩んでいました
Page AとBを持っている親Window
A 全てのオブジェクトをリスト表示するコントロール
B Aで選択されたものを1つずつ追加してリストに表示するコントロール
となっています。
ABはそれぞれ再利用を考えているため、個別のVMを持ち、子のVMは親のVMが持つ事としようと考えています
なので2.についてはBで持つ事にしようと思います
まだ悩んでいるのは1.でして、今のところの実装は
1) AのListのSelectedItemをAVMのプロパティにバインド
2) PageVMでAVMのPropertyChangedイベントをハンドリング
3) PageVM内のロジックでBVMで定義したAddItem(自作)を呼び出す
4) BVMのAddItemメソッドないでObservableCollectionに追加
としています。
この中の2)の部分が特にしっくりこなくて気持ち悪いというのが、質問させていただいた経緯です
1. ItemSourceになっているコレクションに誰が値を入れるべきか?
2. ItemSourceは誰が持つべきか?
の2点で悩んでいました
Page AとBを持っている親Window
A 全てのオブジェクトをリスト表示するコントロール
B Aで選択されたものを1つずつ追加してリストに表示するコントロール
となっています。
ABはそれぞれ再利用を考えているため、個別のVMを持ち、子のVMは親のVMが持つ事としようと考えています
なので2.についてはBで持つ事にしようと思います
まだ悩んでいるのは1.でして、今のところの実装は
1) AのListのSelectedItemをAVMのプロパティにバインド
2) PageVMでAVMのPropertyChangedイベントをハンドリング
3) PageVM内のロジックでBVMで定義したAddItem(自作)を呼び出す
4) BVMのAddItemメソッドないでObservableCollectionに追加
としています。
この中の2)の部分が特にしっくりこなくて気持ち悪いというのが、質問させていただいた経緯です
422デフォルトの名無しさん
2012/11/13(火) 21:27:06.52 >>421
あまり参考にならないかもですけど、
もし俺が、そういうPage,A,Bの3つのVMでやるとしたら
Aのコンストラクタの引数で、デリゲートを受け取れるようにしておく
AではPropertyChangedのハンドラで、その受け取ったデリゲート呼ぶようにしておく
PageからA,Bをインスタンス化する際に、
BのAddItemを呼び出す処理や、Pageでやるべき処理もあればまとめて、
Aのコンストラクタに全部、ラムダ式で渡す
これで後は、AのPropertyChanged内だけで、PageやBの処理も全て完結
って感じにするかな…。
あまり参考にならないかもですけど、
もし俺が、そういうPage,A,Bの3つのVMでやるとしたら
Aのコンストラクタの引数で、デリゲートを受け取れるようにしておく
AではPropertyChangedのハンドラで、その受け取ったデリゲート呼ぶようにしておく
PageからA,Bをインスタンス化する際に、
BのAddItemを呼び出す処理や、Pageでやるべき処理もあればまとめて、
Aのコンストラクタに全部、ラムダ式で渡す
これで後は、AのPropertyChanged内だけで、PageやBの処理も全て完結
って感じにするかな…。
423デフォルトの名無しさん
2012/11/13(火) 21:40:19.58 >>422
ふむふむ、なるほど
レス読ませてもらって考えているうちに思ったんですが、AVMにItemが選択された
ことを通知するイベントを定義して、そこにラムダ式突っ込んであげれば良いのかな?
って気がしてきました
何が気持ち悪かったって、AVMにはほかにプロパティもあるわけで、PropertyChangedを
ハンドルしていると、別にPageには興味がないプロパティも飛んでくるわ
プロパティの名前をAVMで定数定義してAVMからもPageVMからも参照しようとすると、
MVVM Light ToolkitでVMのインスタンスを生成するときにエラーで落ちちゃって
プロパティ名をAとPageの双方に文字列で指定してた所なんで、一番キモイ所は解決された気がします
ただなんか手法が古臭いような気がしないでもないですがw
XAMLでこう書いてああ書いてすればサクっとできちゃうよ!的な解決策はさすがにないですよね?w
ふむふむ、なるほど
レス読ませてもらって考えているうちに思ったんですが、AVMにItemが選択された
ことを通知するイベントを定義して、そこにラムダ式突っ込んであげれば良いのかな?
って気がしてきました
何が気持ち悪かったって、AVMにはほかにプロパティもあるわけで、PropertyChangedを
ハンドルしていると、別にPageには興味がないプロパティも飛んでくるわ
プロパティの名前をAVMで定数定義してAVMからもPageVMからも参照しようとすると、
MVVM Light ToolkitでVMのインスタンスを生成するときにエラーで落ちちゃって
プロパティ名をAとPageの双方に文字列で指定してた所なんで、一番キモイ所は解決された気がします
ただなんか手法が古臭いような気がしないでもないですがw
XAMLでこう書いてああ書いてすればサクっとできちゃうよ!的な解決策はさすがにないですよね?w
424デフォルトの名無しさん
2012/11/13(火) 23:15:36.04 @ugaya40: 難しいとかいってる人はコードビハインドでMVVMしましょ
コイツ、MVVMでコードビハインド使うのはMVVMを理解していない無能のすること とか散々ほざいてたくせしてなに言っちゃってんのって感じなんだが。
「難しいとか言ってる人」とかつけ加えてて誤魔化してんじゃねーよ。
難しいとか難度の問題じゃないってわかんねーのかな?
コイツ、MVVMでコードビハインド使うのはMVVMを理解していない無能のすること とか散々ほざいてたくせしてなに言っちゃってんのって感じなんだが。
「難しいとか言ってる人」とかつけ加えてて誤魔化してんじゃねーよ。
難しいとか難度の問題じゃないってわかんねーのかな?
425デフォルトの名無しさん
2012/11/13(火) 23:18:09.19 コードビハインドを使用したものは神の怒りに触れ
永久にメモリリークの責め苦を受けるんじゃなかったのかw
永久にメモリリークの責め苦を受けるんじゃなかったのかw
426デフォルトの名無しさん
2012/11/13(火) 23:23:22.77 テンプレートにハンドラつけた場合じゃねそれ
427デフォルトの名無しさん
2012/11/13(火) 23:28:45.74 自作のライブラリーをコードビハインドに対応させるって言ってたし完全に方向転換したんじゃないのかな?
それ自体はいい事だとは思うけどね
ただ、間違った持論でMVVMの概念をめちゃくちゃにした罪は大きいよね
きちんと間違ってたことを認めればいいけど、あの歪んだ性格じゃ無理だろうな…
それ自体はいい事だとは思うけどね
ただ、間違った持論でMVVMの概念をめちゃくちゃにした罪は大きいよね
きちんと間違ってたことを認めればいいけど、あの歪んだ性格じゃ無理だろうな…
428デフォルトの名無しさん
2012/11/13(火) 23:33:30.98 必死にPSDって略語を流行らせようとしてるのに誰も使ってないのが泣ける、というか笑えるw
429デフォルトの名無しさん
2012/11/13(火) 23:39:32.37 PDS言ってるのは知ってるがPSDは知らんな
430デフォルトの名無しさん
2012/11/13(火) 23:40:55.84 DPSならしってる。全部知ってる。DPS全部
431デフォルトの名無しさん
2012/11/13(火) 23:43:51.07 社内ではよく使うがネットで使う機会が無い
432デフォルトの名無しさん
2012/11/13(火) 23:45:32.47 本人もあれだけど最近はアンチのがウザいな
直接煽られたことある人はそうなるのか
直接煽られたことある人はそうなるのか
433デフォルトの名無しさん
2012/11/13(火) 23:50:31.04 面白がってアンチに乗じてアンチごっこしてるやつが一番うざいし役に立たない
434デフォルトの名無しさん
2012/11/14(水) 00:37:00.22 MSの将来が不安なのでAndroidのMVVM環境教えてください
435デフォルトの名無しさん
2012/11/14(水) 00:42:27.62 JavaScriptでよければ
KnockoutがMVVMのフレームワークだよ
KnockoutがMVVMのフレームワークだよ
436デフォルトの名無しさん
2012/11/14(水) 00:47:11.25 Androidでバインディングは無理だと思う
コントロールがそれぞれ独自にXML読むクソ設計なんだぜ?w
コントロールがそれぞれ独自にXML読むクソ設計なんだぜ?w
437デフォルトの名無しさん
2012/11/14(水) 00:59:28.17 AndroidのフレームワークでバインディングやるならActivityのコード側でsetBindingみたいなメソッド呼んで
実装はリフレクションで頑張るしかないだろうけど
そんなことするくらいならPassive Viewの方がいいと思う
実装はリフレクションで頑張るしかないだろうけど
そんなことするくらいならPassive Viewの方がいいと思う
438デフォルトの名無しさん
2012/11/14(水) 01:13:42.40 さすがに今年中にBlend出してくれんとしんどいわMSさん
439デフォルトの名無しさん
2012/11/14(水) 01:24:18.30 Expression Studio 5まだー?
440デフォルトの名無しさん
2012/11/14(水) 02:03:13.02 android binding があるでしょ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「中国人の訪日熱は冷めた」 人気旅行先から日本外れる 14日で自粛呼びかけ1カ月 ★2 [蚤の市★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★7 [蚤の市★]
- 最新版Z級クソ映画ランキングが決定! [牛丼★]
- 【STARTO ENTERTAINMENT】SUPER EIGHTの横山裕、フジ『ドッキリGP』ロケで全治2ヶ月の重傷 [Ailuropoda melanoleuca★]
- 「1800万円の売り上げゼロに…」中国インバウンドに特化の宿の今 ★2 [蚤の市★]
- 公用車カーナビのNHK受信料「全額免除を」 千葉市議会、国に制度創設求める意見書可決 [少考さん★]
- 【朗報】愛国保守党の公約、ガチでアリだと話題にwwwwwwwwww
- 【朗報】南鳥島のレアアース、中国産の「20倍の純度」青山繁晴氏「日本は資源大国」日本復活のファンファーレが鳴り響く! [673057929]
- 愛国者「釘を使わない日本独自の伝統工法スゴイ!」X民「それ中国起源ですよ」→批判殺到 [834922174]
- ハイドロポンプ←これなんて略してる?
- 👊😅👊三☁😶‍🌫三⛅🏡
- コーヒー、来年3月から30パーセント値上げへ [709039863]
