2013-03-10 29 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

相關問題