問題タブ [viewmodel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - ビューモデルのSelectedItemへのTreeView同期
WPF TreeView コントロールの上に ViewModel があります。ViewModel が TreeView から SelectedItem を設定および読み取ることができるようにします。ただし、TreeView の SelectedItem プロパティはバインドできません。
(ItemContainerGenerator と TreeViewItem.IsSelected = true を使用して) コード ビハインドで選択したアイテムを設定および取得することはできますが、これにより、コード ビハインドと ViewModel の間の醜い通信が発生します。
誰もこれに対するきれいな解決策を持っていますか?
silverlight - 共通の ViewModel 機能を基本クラスにプッシュしますか?
Prism と Silverlight で MVVM を使用しています。1 つのモデルに対して複数の異なるビューがあります。私がより多くのビューを書いているので、それらのビューモデルは、この 1 つのモデルの処理に関連する多くの一般的なコードを複製しているようです。すべての VM で同じ共通コードを繰り返すのではなく、それをモデルに押し戻したいと思っています (これは、懸念事項があまりにも複雑になる可能性があります)。それとも、いくつかの一般的な ViewModel 基本クラスに入れますか? それとも、VM とモデルの間に第 2 レベルの「共有 VM」が必要なのでしょうか? この単一の共有インスタンスである第 2 レベルの VM は、複数の通常の VM によって共有される動作と状態を統合します。
これらの問題と可能なアプローチについて何かコメントはありますか?
コメントありがとうございます。問題となっている特定の「共有」VM コードについて、もっと詳しく説明するべきだったでしょう。
VM 基本クラスに将来のコードを配置することはわかりますが、私が見ている特定の「共有」コードは、モデル自体によって実装された INotifyPropertyChanged に属しているようです。これは、この別のスレッドに部分的に基づいています。
モデルは本質的に動的であるため、これが SoC に違反しているとは思いません。そのプロパティの一部は、特定の時間にのみ有効です。モデルのその動的な性質は、UI にとって重要なだけでなく、適切な単体テストでも考慮されます。したがって、このモデルには INotifyPropertyChanged が必要なようです。
それについて何かコメントはありますか?
mvvm - MVVM を使用した WPF ツールキット DataGrid MultiSelect
WPF ツールキットの WPF DataGrid を使用しており、MVVM を採用しています。MVVM で MultiSelect を使用する際にいくつかの課題が見つかりましたが、単純なものが欠けているだけだと確信しています。ViewModel で "IsSelected" を使用して、DataGrid で行を選択するときにイベントを取得できます。これは、単一の選択に対してはうまく機能します。
「SelectionMode=Extended」を設定した場合でも、DataGrid の最初の行の選択でのみイベントを取得します。分離コードの SelectionChanged は各選択イベントを取得しますが、ViewModel でこれを機能させたいと思っています。おそらく、この multiSelect には、私が見逃している簡単な解決策があります。また、これらすべてを取得するために SelectedItems (複数) をコレクションにバインドしようとしましたが、SelectedItems は読み取り専用であるため、バインドできません。このメソッドをコードビハインドからViewModelに移動できないため、これを行う方法についてのアイデアをいただければ幸いです。
silverlight - ビューモデルプロパティの更新に基づくSilverlightの動作
ページのビューモデルのプロパティの変更によってトリガーされるSilverlightの動作が必要です。しかし、これを行う方法がわかりません。
だから、私は非常に単純なビューモデルを持っています:
このビューモデルは、テキストブロックが次の場所にバインドされているユーザーコントロールのデータコンテキストですSomeProperty
。
これはすべて正常に機能します。ここで、ビューモデルのmyTextBlock
変更によってトリガーされるビヘイビアーをアタッチしたいと思います。動作は、たとえば(またはより洗練されたもの)ChangingProperty
を強調する必要があります。TextBlock
このトリガーを指定するにはどうすればよいですか?これは可能ですか?
敬具、
ロナルド
wpf - WPF MasterDetail ViewModel は、マスター リストへの更新を遅らせます。(グリッドが自動的に更新されないようにする)
基幹業務プロジェクトに MVVM パターンを実装する最初の試み。次のような簡単な答えがあると思われる質問に出くわしています。
プロトタイプ ウィンドウは、アイテム リストの基本的なマスター詳細ビューです。(Person オブジェクトのリスト)。ビューには、マスター リストの Infragistics xamDataGrid が含まれています。グリッドでアイテムが選択されると、下の詳細パネルで詳細を編集できます。詳細パネルのフィールドをタブで移動すると、更新がグリッド データに「リアルタイム」で表示されます。唯一のことは、「プレスト」が必要ないことです。「[変更を適用] ボタンを押すまで待ちたい」ということです。
詳細パネルで追加/削除/変更しているアイテムの作業セットからマスターリストを分離するために、リストの別のインスタンスを作成しないようにしたいと考えていました。
私が行った道:
バインディングを「OneWay」に設定できるように、グリッド フィールドの CellValuePresenter スタイルをオーバーライドしました。これにより、リアルタイムの更新が妨げられます。
次に、「ApplyUpdates」コマンド (RelayCommand) を PersonListViewModel に追加します。これにより、「PERSON _ITEM_
UPDATED」メッセージが発生します。MVVM Foundation Messenger および RelayCommand クラスの VB ポートを使用しています。
PersonView は PERSON _ITEM_
UPDATED メッセージを登録し、メッセージの受信時にグリッドを再バインドします。
それで、それはうまくいきますが、それは間違ったにおいがします. ビューにはあまりにも多くのロジックが含まれているようで、ViewModel は UI の状態を指示していません。ビューはそうです。
私は何が欠けていますか?ビューへの変更の公開を遅らせるために ViewModel を取得するには、どのような方法を使用しますか?
更新: 現在、グリッド用のカスタム ViewModel (読み取り専用、Propertychanged 通知なし) と詳細領域用の編集可能な ViewModel を作成する道をたどっています。両方の VM が同じビジネス オブジェクトをラップしますが、読み取り専用バージョンは変更を発行しません。これにより、ビューがいつ更新されるかを VM が制御できるようになります。
asp.net-mvc - ASP.NET MVC - モデルがカスタム ViewModel にラップされていない限り、フォームは Null モデルを返します
アプリケーションに 1 組のビューがあり、どちらもモデル アイテムの 1 つに対して同じエディター テンプレートを表示します。2 つのビュー (「追加」と「編集」) のうち、「編集」は正常に機能しますが、コントローラー アクションが投稿を処理するときに「追加」がモデルに対して null を返します。
「追加」ビューにカスタム ViewModel を与えて、Html.EditorFor(p => p.PageContent)
単に Model オブジェクト全体で EditorFor() を呼び出すのではなく呼び出すとHtml.EditorFor(p => p)
、フォームは正しい null 以外のモデルを返しますが、それに関連する他の問題が発生することがわかりました。クライアント側のスクリプトとコントロール ID (すべてのフィールドに "PageContent_" というプレフィックスが付いているため)。アプリケーション全体のいくつかの異なる場所で同じエディター テンプレート手法を使用していますが、ViewModel に対するこの奇妙な依存関係を示すものは他にありません。
他の誰かが同様の問題を経験したことがありますか?
ビューを編集
アクション (動作中)
ビューを追加
アクション (失敗)
泣く前に「重複」
この質問はこれに関連していますが、この質問は、そこで尋ねられるより一般的な質問ではなく、私が経験している特定の問題を対象とすることを目的としています。
silverlight - SilverLight - ビューモデル プロパティをデータグリッド列にバインドする MVVM
SilverLight アプリケーションでは、ViewModel に「vmProperty」と呼ばれるプロパティと「dgSource」と呼ばれるリストがあります。
dgSource を ItemsSource としてデータグリッドにバインドします。この時点で、各データグリッド行のデータコンテキストが dgSource の各項目に変更されます。列の 1 つ、たとえばチェックボックス列は、vmProperty にバインドする必要があります。しかし、ViewModel は行のデータ コンテキストではないため、このプロパティにアクセスできません。
この問題を回避するにはどうすればよいですか? 質問が明確でない場合は、お知らせください。サンプルを投稿します。前もって感謝します。
wpf - WPF:コードビハインドでコードなしでViewModelからViewにイベントを通知する方法は?
私は非常に単純です(私は願っています:))問題:
MVVM では、View は通常、ViewModel のプロパティの変更をリッスンします。ただし、たとえば、VM シグナルが発生したときに View がアニメーションを開始したり、ウィンドウを閉じたりできるように、イベントをリッスンしたい場合があります。
NotifyPropertyChanged を使用して bool プロパティを介して実行する (および false から true に変更された場合にのみアニメーションを開始する) ことは可能ですが、ハックのように感じます。意味的に正しいので、イベントを公開することをお勧めします。
また、分離コードでコードなしで実行したいと思います。これを行うとviewModel.myEvent += handler
、View を GC できるようにするために手動でイベントの登録を解除する必要があるためです。 '、そして私は View で宣言的にのみプログラミングすることを好みます。
1 つの View に対して複数の ViewModel を切り替える必要があるため (毎回 View を作成すると CPU 時間がかかりすぎるため)、標準の強力なイベント サブスクリプションも良くありません。
アイデアをありがとうございます (標準的な解決策がある場合は、msdn へのリンクで十分です)。
wpf - ViewModelを集約するのは良い考えですか?
別のViewModelのプロパティとしてViewModelを使用するのは良い考えですか、それとも悪い考えですか。
例えば:
asp.net - asp.net mvc - メタ タグとページ タイトルの設定
BaseViewModelを使用して、強く型付けされたビューモデルをすべてのビューに渡すasp.net mvcプロジェクトのセットアップがあります。ベース ビュー モデルには、ページ タイトルやメタ タグ情報などの情報が含まれます。
ViewModel からのこの情報を使用して、この情報をマスター ページに設定するための高速で簡単な方法はありますか?
現時点では、すべてのビューに以下のようなコードを含める必要があります。
現在行っている方法以外に、この情報を自動的に設定する方法は考えられませんが、この繰り返される html コードを最適化しようとしています。
ありがとう!ポール