Windows应用商店应用 - 如何从绑定命令返回

时间:2013-03-10 05:28:14

标签: c# windows-store-apps winrt-xaml commandbinding

我对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已保存成功。如果我不够清楚,请告诉我。

1 个答案:

答案 0 :(得分:0)

通过 Frame.Navigate 功能

发送导航参数
void Save()
{
    SampleDataSource.UpdateGroup(this);
    SampleDataSource.SaveFileAsync();
    this.Frame.Navigate(typeof(GroupedItemsPage), "Saved");
}

然后,在 GroupedItemsPage 中读取在 LoadState 函数中发送到Frame的参数,如果它不为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();
   }
}