MvvmCross v3 では、ViewModel が現在のプレゼンテーションを変更したいというメッセージを UI に送信できるようにする特定のメカニズムを提供しました。
このメカニズムは、 からへChangePresentation(MvxPresentationHint hint)のメッセージ (プレゼンテーション ヒント) のルーティングを提供します。ViewModelsPresenter
がこれらのメッセージを処理する方法は、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、FinishAndroid、およびPopViewControlleriOSに。
ただし、UI がそれよりも複雑な場合 (たとえば、が 、、ペインなどViewModelにClose実際に対応する場合、またはが階層内の現在の最上位ビュー以外のものに対応する場合) は、カスタム プレゼンターの実装を提供する必要があります。また、その実装は、プラットフォームおよびアプリケーション固有のロジックを実行して.TabFlyoutSplitViewViewModelClose
上記のヒントは、私があなたに使用することをお勧めするものです...
ただし、代替手段として:
このChangePresentation(MvxPresentationHint hint)メカニズムが単にアプリにとって重すぎる/やり過ぎだと感じた場合は、もちろん、Message代わりにカスタムまたはベースのメカニズムにドロップダウンすることもできます。
これを行う 1 つのサンプルは CustomerManagement サンプルです。各プラットフォームでカスタム IViewModelCloser 実装を提供します。次を参照してください。