3

Silverlight 3 ベータ ナビゲーション アプリケーションを開発しているので、MVVM パターンのわずかなバリエーションを使用しました :) (オールインワン ビューモデル)、プリズムなどを使用します。

質問: ビューモデルで別の「NavigationPage」に移動するにはどうすればよいですか

簡単に言うと、ビューモデルはページ リソースとして宣言されます。

<navigation:Page.Resources>
    <mvvm:LoginModel x:Key="DataSource" d:IsDataSource="True"></mvvm:LoginModel>
</navigation:Page.Resources>

そして、ビューモデルですべてを結び付けるコマンドが使用されます

<Button x:Name="LoginButton" Width="100"  Margin="8" Content="Login"
        prism:Click.Command="{Binding LoginCommand}"/>

今、ビューモデルのどこにでも移動しようとすると

this.NavigationService.Navigate(new Uri("/Views/About.xaml", UriKind.Relative));

Navigationserviceはnullです。周りを見回して、ナビゲーションにヘリックス0.3を使用する方法について説明しているこの記事を見つけました。これは、ナビゲーションコントロールが存在しなかったsl2時代に構築されました。現在、ヘリックスのモデルはうまく機能し、INavigationAwareを実装することでビューモデルを使用すると、NavigationContext にアクセスできるようになり、必要なことは何でも実行できます。らせんを試してみましたが、動作します。

SL3 には組み込みのナビゲーション サポートが付属しており、いわば helix とまったく同じことを行います。そのため、サードパーティのフレームワークを使用したくありません。代わりに、組み込みの sl3 機能を使用することを好みます。

SL3 にヘリックスの INavigationAware インターフェイスをエミュレートするものはありますか?

4

5 に答える 5

1

MVVM ライトを使用している場合は、メッセージング システムの使用を検討することをお勧めします。ナビゲーションを実行し、ビュー モデルからナビゲーション メッセージを送信するフレームをホストするページにリスナーを配置します。

于 2010-10-13T19:49:53.680 に答える
1

危険な修正ですが、これを機能させるために使用できた唯一のものです。ビューの OnNavigatedTo イベントで、ViewModel にアクセスし、NavigationService をビューモデルのプロパティに設定して、後でビューモデルで使用できるようにします。

    protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            ViewModels.LoginViewModel viewmodel = (ViewModels.LoginViewModel)this.Resources["DataSource"];
//DataSource being the x:Name given to the viewmodel that is loaded as a page resource
            viewmodel .service = NavigationService;
        }
于 2009-06-30T07:55:48.633 に答える
0
NavigationService.Navigate(new Uri("/About", UriKind.Relative));

上記で動作するはずです。

于 2009-12-08T09:55:55.037 に答える
0

私の質問を手伝ってよろしいですか、まだ回答がありませんので、さらに情報を追加します。

これはビューモデルのコードです

public LoginModel()
    {
        LoginCommand = new DelegateCommand<object>(LoginCommandExecuted, a => { return _CanLoginCommandExecute; });
    }

    public ICommand LoginCommand { get; private set; }
    private bool _CanLoginCommandExecute = true;
    private void LoginCommandExecuted(object parameter)

    {
        _CanLoginCommandExecute = false;

        AdminClient client = new AdminClient();
        client.AuthorizeAsync();
        client.AuthorizeCompleted += 
        new EventHandler<AsyncCompletedEventArgs>(
                (s, e) =>
                {
                    if (e.Error != null)
                    {
                        MessageBox.Show("Login Failed");
                    }
                    else
                    {
                        this.NavigationService.Navigate(new Uri("/Views/About.xaml", UriKind.Relative));
                    }
                    _CanLoginCommandExecute = true;
                }
                );

    }

NavigationService が null であるため、次のビューに移動できません。助けてください!!!

于 2009-06-29T10:23:49.833 に答える