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。如果我不够清楚,请告诉我。
几乎在那里。私有方法** Save()**不在'partial class GroupedItemPage:LayoutAwarePage'内部,而是在我的viewmodel类中** SampleDataItem **(我的意思是** this.Frame **现在不可用) 。我应该将** GroupedItemPage **的父实例传递给我的viewmodel构造函数吗(这是一个很好的习惯)? – 2013-03-10 20:53:09
您可以传递框架或其INavigate接口 - http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.inavigate.aspx – 2013-03-10 21:23:15
它是不是伤害了原理MVVM的? – 2013-03-11 03:19:03