2013-03-10 71 views
1

我在Windows Store应用程序中绑定命令和框架导航有点困惑。我开始使用电网应用(XAML)模板从Windows应用商店的一个项目,并增加了appbar如下:Windows Store应用程序 - 如何从绑定命令中删除

<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。如果我不够清楚,请告诉我。

回答

0

发送导航参数通过Frame.Navigate功能

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

,然后在GroupedItemsPage阅读LoadState的功能发送到帧参数,如果它不为空展的消息与该参数对话

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(); 
    } 
} 
+0

几乎在那里。私有方法** Save()**不在'partial class GroupedItemPage:LayoutAwarePage'内部,而是在我的viewmodel类中** SampleDataItem **(我的意思是** this.Frame **现在不可用) 。我应该将** GroupedItemPage **的父实例传递给我的viewmodel构造函数吗(这是一个很好的习惯)? – 2013-03-10 20:53:09

+0

您可以传递框架或其INavigate接口 - http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.inavigate.aspx – 2013-03-10 21:23:15

+0

它是不是伤害了原理MVVM的? – 2013-03-11 03:19:03

相关问题