MvvmCross v3 では、ViewModel が現在のプレゼンテーションを変更したいというメッセージを UI に送信できるようにする特定のメカニズムを提供しました。
このメカニズムは、 からへChangePresentation(MvxPresentationHint hint)
のメッセージ (プレゼンテーション ヒント) のルーティングを提供します。ViewModels
Presenter
がこれらのメッセージを処理する方法は、Presenter
プラットフォームおよびアプリケーションによって異なります。
このメッセージ メカニズムは非常に一般的であり、将来あらゆる種類のものに使用される可能性があります。たとえば、開発者は、UI レイアウトの変更、UI の一部の強調表示、ユーザーのフォーカスを特定のものに強制するなどのヒントを提供する可能性があります。 SIP を表示または非表示にするなどの制御。
ビュー モデルを閉じる場合のために、特殊化されたMvxPresentationHint
- MvxClosePresentationHint
- とヘルパー メソッドが の基本クラスに用意されていMvxViewModel
ます。
protected bool Close(IMvxViewModel viewModel)
{
return ChangePresentation(new MvxClosePresentationHint(viewModel));
}
これを使用するには、ViewModel を呼び出すだけですClose(this)
これが呼び出されると、UI 内のプレゼンターはChangePresentation
メソッドでメッセージを受け取ります。
public interface IMvxViewPresenter
{
void Show(MvxViewModelRequest request);
void ChangePresentation(MvxPresentationHint hint);
}
一般的/典型的なケース -ViewModel
閉じられている が最上位のビューにアタッチされているActivity
/ Page
/UIViewController
場合、MvvmCross 内のデフォルトのプレゼンターはこのメッセージを処理できGoBack
、Windows、Finish
Android、およびPopViewController
iOSに。
ただし、UI がそれよりも複雑な場合 (たとえば、が 、、ペインなどViewModel
にClose
実際に対応する場合、またはが階層内の現在の最上位ビュー以外のものに対応する場合) は、カスタム プレゼンターの実装を提供する必要があります。また、その実装は、プラットフォームおよびアプリケーション固有のロジックを実行して.Tab
Flyout
SplitView
ViewModel
Close
上記のヒントは、私があなたに使用することをお勧めするものです...
ただし、代替手段として:
このChangePresentation(MvxPresentationHint hint)
メカニズムが単にアプリにとって重すぎる/やり過ぎだと感じた場合は、もちろん、Message
代わりにカスタムまたはベースのメカニズムにドロップダウンすることもできます。
これを行う 1 つのサンプルは CustomerManagement サンプルです。各プラットフォームでカスタム IViewModelCloser 実装を提供します。次を参照してください。