0

UWP を作成し、テンプレート 10 を使用しています。

ViewModel で計算されたばかりのデータをユーザーに表示する ModalDialog を作成しました。

これが私が迷っているところです:

#1、ModalDialog は ViewModel からのデータを必要とします。#2、ModalDialog は、ユーザーがクリックするボタンに応じて、ViewModel で 1 つ以上のメソッドを呼び出す必要があります。

私のShell.xaml.cs:

public sealed partial class Shell : Page
{
    public static Shell Instance { get; set; }
    public static HamburgerMenu HamburgerMenu => Instance.MyHamburgerMenu;


    public Shell()
    {
        Instance = this;
        InitializeComponent();
        if (App.MobileService.CurrentUser == null)
            LoginModal.IsModal = true;
    }

    public Shell(INavigationService navigationService) : this()
    {
        SetNavigationService(navigationService);
    }

    public void SetNavigationService(INavigationService navigationService)
    {
        MyHamburgerMenu.NavigationService = navigationService;
    }

    #region Login

    private void LoginLoggedIn(object sender, EventArgs e)
    {
       MyHamburgerMenu.NavigationService.Navigate(typeof(Views.MainPage));
       LoginModal.IsModal = false;
    }

    #endregion
}

}

Shell.xaml

<Controls:ModalDialog x:Name="ScoreModal" Grid.RowSpan="3"
                          CanBackButtonDismiss="False"
                          DisableBackButtonWhenModal="True">
        <Controls:ModalDialog.ModalContent>
            <myControls:QuizScorePart
                    HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
        </Controls:ModalDialog.ModalContent>
    </Controls:ModalDialog>

私が試したこと:

ModalDialog のコントロールを、話したい ViewwModel を使用するビューに配置しようとしましたが、うまくいきません。そのビューはシェル内に存在します。つまり、ModalDialog の下にあるものはすべて無効になっていません。私が知っていることから、それはシェルにある必要があります。

ダイアログの IsModal を true/false に設定するメソッドを Shell.xaml.cs ファイルに設定しようとしました。これは機能しますが、ViewModel とのやり取りの問題は解決しません。

道に迷いました。助けてくれてありがとう。

4

1 に答える 1

0

検索の例を参照してください。実際の部分で処理するデリゲートがあります。LoginPart の分離コードを見てください。

以下のコメントで指定したのは、ユーザーコントロールではなく、LoginPage で行う方法です。これには LoginPageViewModel があり、次に SettingsService インスタンスが参照されています。

編集

このように考えてみてください...ScoreModal は別のビュー コントロールに他なりません。QuizScorePart はあなたの View です。QuizScorePartViewModal が存在すると仮定します。そこから、ビューモデル間のメッセージ パッシングの練習になります。少なくともそれは、最後のコメントの後に私が目にするものです。ユーザーがどのボタンをクリックしたかを知る必要があります。上記が当てはまると仮定すると、QuizViewModel はリッスンしていたメッセージに反応します。シェルは、IsModal にのみ反応するため、完全なスクリーン カバーの保持場所にすぎません。それが問題である場合は、SettingsService の動作と同様に、Service がボタンの選択を保持することを検討してください。QuizScorePart がそのデータ コンテキストを QuizViewModel のデータ コンテキストに設定できなかったということは何もありませんが、その時点ではテストの問題である可能性があります。

于 2016-06-03T05:39:41.013 に答える