0

正しい質問をしているのか、間違った方法で行っているのかはわかりませんが、GridAppプロジェクトテンプレートを使用してWindows8アプリを開発しています。

itemdetailテンプレートでは、表示しているアイテムを削除することができます。削除した後、アプリのメインエントリページに戻ります。

ただし、戻るボタンはそこにあり、クリックすると、削除されたオブジェクトのそのフレームに戻ろうとします。

どうすればこれを回避できますか?

4

3 に答える 3

1

GoBack()削除機能では、削除直後にページが自動的にメイン ページに移動するように呼び出すことができます。

また、戻るボタンには次のコードが必要です

IsEnabled="{Binding Frame.CanGoBack, ElementName=pageRoot}"

戻るページがあるかどうかに応じて、戻るボタンを有効または無効にします。

あなたが言っGoHome()たように、この問題に対する最良の解決策です。

Windows 8/RT でのページ ナビゲーションの詳細

于 2012-10-23T01:52:02.183 に答える
0

これを行う最も簡単な方法は、ボタンに関連付けられた組み込みのCommandingメカニズムを使用することです。

Xaml:

viewModel:

public ViewModel()
{
    _goBackCommand=new DelegateCommand(GoBackMethod,CanGoBackMethod);
}
public ICommand GoBackCommand
{
    get{return _goBackCommand;}
} 

private void GoBackMethod()
{
    Frame.Navigate(blah);
}

private bool CanGoBackMethod()
{
    return _isDeleted;
}

public void Delete()
{
    _isDeleted=false;
    //this forces the command to re-evaluate whether it can execute
    _goBackCommand.RaiseCanExecuteChanged();
}

MVVMを使用しておらず、コードビハインドを使用している場合でも、コマンドをボタンオブジェクトにバインドして、まったく同じことを実行できます。RaiseCanExecuteChanged機能を備えたコマンドを作成する必要がある場合は、次を使用できます。

public class DelegateCommand : ICommand
{
    private readonly Predicate<object> _canExecute;
    private readonly Action<object> _execute;

    public event EventHandler CanExecuteChanged;

    public DelegateCommand(Action<object> execute) 
                   : this(execute, null)
    {
    }

    public DelegateCommand(Action<object> execute, 
                   Predicate<object> canExecute)
    {
        _execute = execute;
        _canExecute = canExecute;
    }

    public override bool CanExecute(object parameter)
    {
        if (_canExecute == null)
        {
            return true;
        }

        return _canExecute(parameter);
    }

    public override void Execute(object parameter)
    {
        _execute(parameter);
    }

    public void RaiseCanExecuteChanged()
    {
        if( CanExecuteChanged != null )
        {
            CanExecuteChanged(this, EventArgs.Empty);
        }
    }
}

PrismまたはMvvmLightを使用している場合は、独自のコマンドでこれをすぐに実装できます。

于 2012-10-23T08:42:02.030 に答える
0

これはすべての戻るナビゲーションを削除します。

if (this.Frame != null) { while (this.Frame.CanGoBack) this.Frame.GoBack(); }

于 2013-07-18T08:39:01.413 に答える