2

WPFアプリケーションでMVVMCrossを使用しており、アプリケーション全体をシャットダウンするために GUI に [閉じる] (または[終了]) ボタンを提供したいと考えています。MVVMCross機能を使用してこれを行う簡単な方法はありますか?

私は自分で次のアプローチを試しましたMainViewModel

public class MainViewModel : MvxViewModel
{
    private MvxCommand _closeCommand;
    public MvxCommand CloseCommand {
        get { 
            return _closeCommand ?? (_closeCommand = new MvxCommand(DoClose));
        }
    }

    public void DoClose() {
        Close(this);
    }
}

残念ながら、役に立ちませんでした。にDoCloseバインドされているボタンを押すとメソッドが呼び出されますが、WPFが に設定されていてCloseCommandも、ビューモデル (および対応するビュー) は閉じません。App StartupUriMainView

4

1 に答える 1

5

多くの MvvmCross プラットフォームは、アプリケーション自体を閉じることをサポートしていません。これは、iOS、WindowsPhone、Android、WindowsPhone などの動作に嫌われています。パブリック API ではサポートされていません。そのため、これは一般的なクロスプラットフォーム リクエストではありません。

ただし、この機能をサポートしているプラ​​ットフォームにこの機能を実装したい場合、これを配置するのに最適な場所は、プレゼンターまたはカスタム UI 注入サービスのいずれかになると思います。


カスタム プレゼンターに配置するには、次のようにします。

  • カスタム プレゼンター クラスを作成する ( MvxWpfViewPresenter.csに基づく)
  • CreatePresenterSetup.csのメソッドのオーバーライドでこのクラスのインスタンスを返します
  • カスタム プレゼンターのメソッドをオーバーライドChangePresentationします。このメソッドは、送信する「よく知られた」MvxClosePresentationHint.csを使用するか、定義して ViewModel でClose送信する新しいカスタム プレゼンテーション ヒントを使用できます。ChangePresentation(MvxPresentationHint hint)

この機能を代わりにカスタム UI サービスに配置するには、http://mvvmcross.wordpress.com/の N=31 を参照してください。


このシャットダウン領域を検討している場合は、(ユーザーまたはオペレーティング システムのアクションによって) アプリケーションがシャットダウンされたときに実行する手順についても検討する必要があります。MvvmCross は、フレームワーク内の一般的な「ライフタイム モニター」フックの始まりを公開しますが、実際には、これらは現時点では非常に基本的なものです。そのため、ここで独自の共通レイヤーを構築する必要がある場合があります。

于 2013-07-22T10:56:57.870 に答える