1

Windows ストア アプリのバインド コマンドとフレーム ナビゲーションについて少し混乱しています。Windows ストアの Grid App (XAML) テンプレートを使用してプロジェクトを開始し、次のように appbar を追加しました。

<AppBar IsSticky="True" IsOpen="True">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <StackPanel x:Name="LeftPanel" Orientation="Horizontal">
        </StackPanel>
        <StackPanel x:Name="RightPanel" Grid.Column="1" HorizontalAlignment="Right" Orientation="Horizontal">
            <Button HorizontalAlignment="Stretch" Style="{StaticResource SaveAppBarButtonStyle}" Command="{Binding Item.UpdateItem}" />
        </StackPanel>
    </Grid>
</AppBar>

次に、クラスにプロパティを作成し、次のようなメソッドを作成しました。

public ICommand UpdateItem 
{
    get { return new UpdateItemCommand(this); }
}

void Save()
{
    SampleDataSource.UpdateGroup(this);

    SampleDataSource.SaveFileAsync();
}

これまでのところ、すべて問題なく、グループが更新され、ファイルも保存されました。UpdateItemCommand クラスの私の実装は次のとおりです。

class UpdateItemCommand : ICommand
{
    public UpdateItemCommand(SampleDataItem viewModel)
    {
        this.viewModel = viewModel;
    }

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        this.viewModel.Save();
        if (CanExecuteChanged != null)
        {
            CanExecuteChanged(this, EventArgs.Empty);
        }
    }

    public SampleDataItem viewModel { get; private set; }
}

ここで、SampleDataSource.SaveFileAsync() メソッドの実行の最後にメイン フレーム (GroupedItemsPage.xaml) に戻り、正常に保存されたファイルの MessageDialog を表示する方法 (正しい方法) を見つけたいと思います。よくわからない場合はお知らせください。

4

1 に答える 1

0

Frame.Navigate関数を介してナビゲーション パラメータを送信する

void Save()
{
    SampleDataSource.UpdateGroup(this);
    SampleDataSource.SaveFileAsync();
    this.Frame.Navigate(typeof(GroupedItemsPage), "Saved");
}

次に、GroupedItemsPageで、Frame in LoadState関数に送信されたパラメーターを読み取り、それが null でない場合は、そのパラメーターを含むメッセージ ダイアログを表示します。

protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
   if (navigationParameter != null)
   {
        String msg = (String) navigationParameter;
        var popup = new Windows.UI.Popups.MessageDialog(msg, "Some title");
        await popup.ShowAsync();
   }
}
于 2013-03-10T18:42:03.810 に答える