0

ボタンがあります:

<sdk:Frame Margin="0,37,0,-15"     
                   Source="/View/Login/LogIn.xaml">
            <navigation:Frame.UriMapper>
                <uriMapper:UriMapper>
                    <uriMapper:UriMapping Uri="/Login" MappedUri="/View/Login/LogIn.xaml" />
                    <uriMapper:UriMapping Uri="/Home" MappedUri="/View/Home.xaml" />
                    <uriMapper:UriMapping Uri="/AddPayment" MappedUri="/View/AddPayment.xaml" />
                    <uriMapper:UriMapping Uri="/Reports" MappedUri="/View/Reports.xaml" />
                    <uriMapper:UriMapping Uri="/Admin" MappedUri="/View/Admin.xaml" />
                    <uriMapper:UriMapping Uri="/Init" MappedUri="/View/Init.xaml" />
                </uriMapper:UriMapper>
            </navigation:Frame.UriMapper>
        </sdk:Frame>
 <HyperlinkButton Grid.Row="2" Grid.Column="1" Content="Log in"  NavigateUri="/Home" Command="{Binding LoginCommand, NotifyOnValidationError=True}"/>

そしてビューモデル:

 public RelayCommand LoginCommand
        {
            get
            {
                return this.loginCommand = new RelayCommand(param => this.LoginExecute(), param => (bool)this.CanLoginCommand);
            }
        }

        private object CanLoginCommand
        {
            get
            {
                return true;
            }
        }

        private void LoginExecute()
        {
            UserBag users = IsolatedStorageCacheManager<UserBag>.Retrieve(typeof(UserBag));
            if (users != null && users.Users != null && users.Users.Any(u => u.UserName == this.login && u.Password == this.password))
            {

            }
            else
            {
                throw new Exception("Bad password");
            }
        }

コマンドが例外を返すと、ビューに戻って表示され、ナビゲート uri が呼び出されないことが必要です。可能です?

4

1 に答える 1

0

この静的クラスを使用して、ViewModelのナビゲーションを管理できます。

public static class NavigationService
{
    private static Frame _frame;
    private static Frame Instance
    {
        get
        {
            if (_frame == null)
                throw new Exception("You must set the instance first");

            return _frame;
        }
    }


    public static void Navigate(string url)
    {
        Instance.Navigate(new Uri(url, UriKind.Relative));
    }

    public static void SetInstance(Frame frame)
    {
        _frame = frame;
    }

    public static void GoBack()
    {
        Instance.GoBack();
    }
}

MainPage.xaml.cs内:

NavigationService.SetInstance(this.ContentFrame); // ContentFrame = your navigation Frame

今あなたのViewModelに:

private void LoginExecute()
    {
        UserBag users = IsolatedStorageCacheManager<UserBag>.Retrieve(typeof(UserBag));
        if (users != null && users.Users != null && users.Users.Any(u => u.UserName == this.login && u.Password == this.password))
        {
            NavigationService.Navigate("/Home");
        }
        else
        {
            throw new Exception("Bad password");
        }
    }

HyperlinkBut​​tonのNavigateUriを削除する必要があります;)

于 2012-10-05T14:02:32.010 に答える