問題タブ [viewmodellocator]

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.

0 投票する
1 に答える
1746 参照

wpf - MVVM 使用時のアプリの終了またはコントロールの終了

私の WPF アプリケーションでは、ViewModelLocatorIoC なしで を使用しています。ViewModelLocator.Cleanup()「ウィンドウを閉じるコマンド」に関連付けられている独自のボタンから、MVVM-Light フレームワークによって提供される静的メソッドを呼び出しています。ViewModelLocator.Cleanup()この Command は、 MainWindowViewModel インスタンスのインスタンス Cleanup() メソッドを呼び出すstaticを呼び出します。次に、インスタンスの Cleanup() メソッドは、MainWindow がそのDataContextをバインドするプロパティを null に設定します。プロパティのセッターがPropertyChangedイベントを発生させます。不思議なことに、このプロパティを null に設定しても、ウィンドウは閉じません。

なぜそうなのか理解しようとしていますか?MainWindowDataContextを null に設定した場合、それは と同じではないWindow.Close()でしょうか? 私の場合、ウィンドウとそのすべての要素が画面に残ります。ただし、さらにアクションを試みると、DataContextバインディング プロパティが実際に null に設定されていることを示す null ポインター例外が発生します。これはデバッガーでも確認されています。

Application.Exit イベントをフックし、イベント ハンドラーで Window.Close() を発行して回避策を作成し、独自の「ウィンドウを閉じる」ボタンを作成しました (つまり、独自のボタン/コマンドをクリックするのと同じ機能を作成しました)。ウィンドウの右上にある X ボタン)。MVVM から UI 要素 (つまり、Window インスタンス) を直接呼び出すのは MVVM に適していないため、回避策を MVVM に適したものにするために、ViewService を使用しWindow.Close() 機能を実装しました。私は ViewService のイディオム (またはパターン) の大ファンですが、ここでは必要ないと思います。ただし、アプリの終了はおそらくアプリケーションのライフサイクルと結びつく特別なケースであり、.Net では Window.Close() メソッドを発行することによってのみ WPF アプリを終了できるようです。

考えていただければ幸いです。

0 投票する
2 に答える
6404 参照

wpf - XAMLでStaticResourceを参照する

通常はapp.xamlで参照されるStaticResourceを参照するUserControlがあり、問題ありません...しかし、私のアセンブリはライブラリプロジェクトであるため、app.xamlはありません。このStaticResourceを今すぐ参照するにはどうすればよいですか?

これが私がそれを参照しようとしているUserControlです

これが通常app.xamlにある場所です

「viewModelLocatorを解決できませんでした」というエラーメッセージが表示されます。

0 投票する
2 に答える
2469 参照

c# - viewmodellocator を使用してビューモデル間でパラメーターを送信する方法

MVVMLight を使用して WPF アプリケーションを作成しています。ViewModelLocator を使用してビューモデルを作成します。私の問題は、それらの間でパラメーターを渡すことです。

たとえば、次のような状況があります。

いくつかのエンティティを含むグリッドがあります。そのうちの 1 つをダブルクリックすると、そのエンティティの詳細を含む新しいビューを作成する必要があります。選択したアイテムIDを新しいビューのViewModelに送信する方法は?

0 投票する
1 に答える
3297 参照

dependency-injection - Autofacを使用してWindowsPhone8アプリケーションにViewModelを挿入するにはどうすればよいですか?

AutofacをIoCコンテナーとして使用して、WindowsPhone8アプリケーションのビューにViewModelを挿入できるようにしたい。どうすればこれを行うことができますか?Caliburn.Microフレームワークを見てきましたが、もっと簡単なものを使用したいと思います。

0 投票する
1 に答える
1261 参照

wpf - 子ビュー モデルへの MVVM ライト パス パラメーター

私はMVVMとWPFが初めてです。

私は MVVM Light を使用して、ウィンドウ内に DataGrid を含むアプリケーションを作成しています。このウィンドウには、ビュー モデル (MainViewModel) と、DataGrid でレコードを追加および編集するための別のウィンドウがあり、独自のビュー モデル (EditViewModel) もあります。

私が心配しているのは、MainViewModel から [追加/編集] ウィンドウを開くために使用しているアプローチです。MainViewModel には、DataGrid の SelectedItem プロパティにバインドされた SelectedItem プロパティと、追加/編集ウィンドウを追加モードまたは編集モードで起動するかどうかを示す IsEdit ブール型プロパティがあります。

追加/編集ウィンドウが編集モードで開かれると、ビューモデルのコンストラクターに次の行があります。

これは明らかに、MainViewModel の現在のインスタンスを取得します。これは完全に正常に機能しますが、これが最善の方法であるかどうかはわかりません。

また、同じ MainViewModel インスタンスを使用するメイン ウィンドウの複数のインスタンスがあり、それらの両方から追加/編集ウィンドウのインスタンスを開くと、追加/編集ウィンドウは同じインスタンスからデータを取得します。問題になる可能性のある MainViewModel。

開いた MainWindow ごとに MainViewModel の新しいインスタンスを作成しようとすると、現在使用されている MainViewModel のインスタンスを EditViewModel に渡す方法がわかりません。

私が何をする必要があるかを明確にしたことを願っています。何か見逃した場合は教えてください。追加します:)

前もって感謝します

0 投票する
0 に答える
251 参照

wpf - mvvmlight でメイン プロジェクトの viewmodellocatoe とは別のプロジェクトに viewmodel を登録します。

MVVMLight の ViewModelLocator クラスで別の参照プロジェクトにビューモデルを登録するにはどうすればよいですか。別のプロジェクトにあるため、SimpleIoc を使用してビューモデル クラスを登録しようとすると、エラーが発生し続けます。アプリケーションのさまざまな部分に対してさまざまなプロジェクトを保持したいと考えています。

0 投票する
1 に答える
1647 参照

c# - Windows Phone 開発における DataBinding について

Data Binding を理解するのに少し苦労しています。私はWindows Phone 8開発を学ぼうとしています。

ここでいくつかのサンプルコードを理解しようとしています。

彼は次のようMainPage.xamlに定義していDataContextます:

LocatorはinViewModelLocatorとして定義され 、 タイプ のパブリック プロパティです。ResourceApp.xamlMasterMasterViewModel

MasterViewModelこれは、クラスのプロパティにアクセスできるようになったことを意味すると思いました。そして、あなたは持っています。しかし、同じページで、彼はMasterViewModelではなく、まったく異なる にあるプロパティにバインドしViewModelます。

Modelは別の のプロパティViewModelです。

では、どうすればアクセスできるのでしょうか? DataContext私が見る限り、彼はどこかを上書きしませんでした。私は何が欠けていますか?

データバインディングをまだ理解していないと思うので、多くのコードを投稿しませんでした。答えは明らかです。必要に応じてさらにコードをお見せします。それは Laurent Ibugnion のサンプル コードです。

前もって感謝します

編集:彼のビデオでは、DataTemplate で DataContext が別の ViewModel に設定されているため、dataBinding を使用できると彼は言っています...しかし、彼がこの viewModel を設定する場所がわかりません:

編集:解決済み私はついにそれを見つけました、

ご協力いただきありがとうございます

0 投票する
2 に答える
6415 参照

viewmodel - MvvmCross ViewModel のキャッシュと再初期化

ViewModel がキャッシュからリロードされているときに、フレームワークをインターセプトして再初期化を実行できるようにする必要があります。ViewModel は再作成されていないため、Init()、MvxViewModel.InitFromBundle、MvxViewModel.ReloadFromBundle のいずれのメソッドも使用できません。

戻るボタンをクリックすると、一貫性のない状態の ViewModel が復元される状況をデバッグしようとしています。ある種の MvxViewModel.OnReloading() が役立ちます。

v3でこれを行う方法はありますか?

編集:

SecondPageViewModel に移動するコマンドを公開する FirstPageViewModel があるとします。私が観察していることに基づいて、SecondPageView でシミュレーターの戻るボタンをクリックすると、FirstPageViewModel は構築されません。代わりに、何らかのキャッシュから取得され、ビューにバインドされていると思います。このキャッシュは、IMvxSingleViewModel キャッシュの実装である可能性があります。

したがって、ViewModel 構築後の通常のフロー (Init()、InitFromBundle()、および ReloadFromBundle() を呼び出す) は、このシナリオには適用されません。つまり、ViewModel が新しく構築されたばかりか、キャッシュから復活したかに関係なく、ViewModel を再初期化する方法が必要です。前者の場合は、Init() メソッドを使用できます。後者の場合、ViewModel 自体でこれを行う方法はありません。

これが問題です:

FirstViewModel から SecondViewModel に渡される ICollectionService のインスタンスがあります。FirstView には、この CollectionService にバインドされた ListView も含まれています。CollectionService は厳密に型指定されていないため、これを渡し、適切な項目テンプレートを使用してその項目をビューに表示できます。

SecondViewModel を表示する前に、FirstViewModel はいくつかのリモート データを取得し、CollectionService に入力します。SecondViewModel が表示されると、そのビューは別のアイテム テンプレートを使用して CollectionService からのデータを表示します。ただし、戻ると、FirstViewModel がまだ CollectionService を参照しているため、FirstViewModel が再初期化されない限り、FirstView は SecondViewModel によって使用されたデータをレンダリングし、その過程で CollectionService をクリアします。アプローチが間違っているかもしれませんが、これが私の問題の核心です。

この再初期化が Core モジュールで発生するため、Windows Phone と iOS で同じ動作が予想されるため、プラットフォームが違いを生むかどうかはわかりません。それにもかかわらず、これらは Android での観察です。

ティア。