問題タブ [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.
wpf - MVVM 使用時のアプリの終了またはコントロールの終了
私の WPF アプリケーションでは、ViewModelLocator
IoC なしで を使用しています。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 アプリを終了できるようです。
考えていただければ幸いです。
wpf - XAMLでStaticResourceを参照する
通常はapp.xamlで参照されるStaticResourceを参照するUserControlがあり、問題ありません...しかし、私のアセンブリはライブラリプロジェクトであるため、app.xamlはありません。このStaticResourceを今すぐ参照するにはどうすればよいですか?
これが私がそれを参照しようとしているUserControlです
これが通常app.xamlにある場所です
「viewModelLocatorを解決できませんでした」というエラーメッセージが表示されます。
c# - viewmodellocator を使用してビューモデル間でパラメーターを送信する方法
MVVMLight を使用して WPF アプリケーションを作成しています。ViewModelLocator を使用してビューモデルを作成します。私の問題は、それらの間でパラメーターを渡すことです。
たとえば、次のような状況があります。
いくつかのエンティティを含むグリッドがあります。そのうちの 1 つをダブルクリックすると、そのエンティティの詳細を含む新しいビューを作成する必要があります。選択したアイテムIDを新しいビューのViewModelに送信する方法は?
dependency-injection - Autofacを使用してWindowsPhone8アプリケーションにViewModelを挿入するにはどうすればよいですか?
AutofacをIoCコンテナーとして使用して、WindowsPhone8アプリケーションのビューにViewModelを挿入できるようにしたい。どうすればこれを行うことができますか?Caliburn.Microフレームワークを見てきましたが、もっと簡単なものを使用したいと思います。
wpf - 子ビュー モデルへの MVVM ライト パス パラメーター
私はMVVMとWPFが初めてです。
私は MVVM Light を使用して、ウィンドウ内に DataGrid を含むアプリケーションを作成しています。このウィンドウには、ビュー モデル (MainViewModel) と、DataGrid でレコードを追加および編集するための別のウィンドウがあり、独自のビュー モデル (EditViewModel) もあります。
私が心配しているのは、MainViewModel から [追加/編集] ウィンドウを開くために使用しているアプローチです。MainViewModel には、DataGrid の SelectedItem プロパティにバインドされた SelectedItem プロパティと、追加/編集ウィンドウを追加モードまたは編集モードで起動するかどうかを示す IsEdit ブール型プロパティがあります。
追加/編集ウィンドウが編集モードで開かれると、ビューモデルのコンストラクターに次の行があります。
これは明らかに、MainViewModel の現在のインスタンスを取得します。これは完全に正常に機能しますが、これが最善の方法であるかどうかはわかりません。
また、同じ MainViewModel インスタンスを使用するメイン ウィンドウの複数のインスタンスがあり、それらの両方から追加/編集ウィンドウのインスタンスを開くと、追加/編集ウィンドウは同じインスタンスからデータを取得します。問題になる可能性のある MainViewModel。
開いた MainWindow ごとに MainViewModel の新しいインスタンスを作成しようとすると、現在使用されている MainViewModel のインスタンスを EditViewModel に渡す方法がわかりません。
私が何をする必要があるかを明確にしたことを願っています。何か見逃した場合は教えてください。追加します:)
前もって感謝します
wpf - mvvmlight でメイン プロジェクトの viewmodellocatoe とは別のプロジェクトに viewmodel を登録します。
MVVMLight の ViewModelLocator クラスで別の参照プロジェクトにビューモデルを登録するにはどうすればよいですか。別のプロジェクトにあるため、SimpleIoc を使用してビューモデル クラスを登録しようとすると、エラーが発生し続けます。アプリケーションのさまざまな部分に対してさまざまなプロジェクトを保持したいと考えています。
c# - Windows Phone 開発における DataBinding について
Data Binding を理解するのに少し苦労しています。私はWindows Phone 8
開発を学ぼうとしています。
ここでいくつかのサンプルコードを理解しようとしています。
彼は次のようMainPage.xaml
に定義していDataContext
ます:
Locator
はinViewModelLocator
として定義され 、
タイプ のパブリック プロパティです。Resource
App.xaml
Master
MasterViewModel
MasterViewModel
これは、クラスのプロパティにアクセスできるようになったことを意味すると思いました。そして、あなたは持っています。しかし、同じページで、彼はMasterViewModel
ではなく、まったく異なる にあるプロパティにバインドしViewModel
ます。
Model
は別の のプロパティViewModel
です。
では、どうすればアクセスできるのでしょうか? DataContext
私が見る限り、彼はどこかを上書きしませんでした。私は何が欠けていますか?
データバインディングをまだ理解していないと思うので、多くのコードを投稿しませんでした。答えは明らかです。必要に応じてさらにコードをお見せします。それは Laurent Ibugnion のサンプル コードです。
前もって感謝します
編集:彼のビデオでは、DataTemplate で DataContext が別の ViewModel に設定されているため、dataBinding を使用できると彼は言っています...しかし、彼がこの viewModel を設定する場所がわかりません:
編集:解決済み私はついにそれを見つけました、
ご協力いただきありがとうございます
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 での観察です。
ティア。