4

プリズムのログイン画面に関する質問と回答を検索したところ、多く見つかりました。ただし、prism がモジュールをロードする前にログイン画面が表示されることを懸念しているようです。私はそれを望んでいません。

私は自分のシェルを持っています。シェルには、リージョンとして機能するさまざまなコンテナーを含むグリッドがあります。これは、ユーザーがログインしたときにプログラムをどのように表示するかです。

この画面に到達する前に、接続モジュールがアプリケーション ウィンドウ全体を占め、接続ボタンでユーザー名、IP アドレス、およびポートを要求するようにします。私が見つけている問題は、ウィンドウ全体を占有できるようにするこのビューに移動するように見える適切な場所がないことです。これを行う唯一の方法は、グリッド内にすべての行と列にまたがるコンテンツ コントロール領域を配置することです。

しかし、これはずさんなようで、確かにこれよりも優れたアプローチがあります。メインアプリケーションコントローラが最初にログインモジュールビューをロードし、次に接続されたときに、接続されているというイベントを発生させて、通常の「シェル」ビューをその場所にロードできるようにする単一のコンテンツコントロールのみをシェルにする必要がありますログインビューはアンロードされて破棄されますか?

4

3 に答える 3

2

ログイン用のイベントを作成します(EventAggregationについて読んだことがあると仮定します)。次に、ログインダイアログのビュー/ビューモデルを含むログインモジュールを作成し、モジュール自体のクラスを作成し、initializeメソッドで、ShowLoginイベントをサブスクライブして、ログインビューを作成します。次に、ブートストラッパー(またはシェル)で、ShowLoginイベントを取得して公開します。

于 2012-10-01T13:11:03.090 に答える
0

StockTrader サンプル アプリに従って、特定のビューを自動エクスポートするようにアプリケーションを構成できます。これは、当社のアプリケーションの 1 つを使用して行います。AutoPopulateExportedViewsBehavior(StockTrader アプリにある)によって入力される「ログイン ビュー」をエクスポートします。基本的に、シェルには 1 つのリージョンがあり、そのリージョンにログイン ビューを設定します。同時に、MainPage同じ地域に登録されます。ログイン ビューを表示し、ログインが成功したら MainPage、リージョン マネージャーを使用するためのナビゲーションを要求します。

于 2012-10-01T13:53:26.683 に答える
0

ウィンドウ全体に展開する必要があるビューを保持する領域をシェルに作成します。アイデアは次のとおりです。

シェル

    <Grid>
    <Grid >
        <Grid.RowDefinitions>
            ....
        </Grid.RowDefinitions>

        <!--ROW 1 -->               
        <!--ROW 2-->
    </Grid>
<!--****THIS IS THE REGION****-->
    <ContentControl x:Name="ShellExpandAllRegions" prism:RegionManager.RegionName="{x:Static staticRegions:RegionConstants.ShellExpandAllRegions}" Panel.ZIndex="100"/>
</Grid>

モジュール初期化子 (IModule) を登録する

RegionManager.RegisterViewWithRegion(RegionConstants.ShellExpandAllRegions,typeof(LoginView));

あなたのViewModel

RegionManager.RequestNavigate(RegionConstants.ShellExpandAllRegions, new Uri(typeof(LoginView).Name, UriKind.Relative)); // The handler for a login event

ビューがこの領域に読み込まれると、ウィンドウ全体が占有されます。

于 2012-10-01T13:53:54.680 に答える