我正在使用 MVVM 模式为 Windows RT / 8.1 开发一个小应用程序。
问题是,当单击时,绑定到 Page.BottomAppBar 中 CommandBar 中的 AppBarButton 的命令(来自 ViewModel)没有触发。如果我在 Page.BottomAppBar 的 CommandBar 中将 DataContext 设置为 ViewModel,它也不起作用。
如果我将没有 Page.BottomAppBar 的 CommandBar-Code 移动到网格中,则该命令可以正常工作,但该应用程序不再检测到背景上的点击,这意味着 CommandBar 在应该关闭时不会关闭.
我认为,它与 DataContext-Binding 有关,但我不知道如何解决这个问题。
也没有出现错误或提示。那里有解决方案吗?非常感谢你!:)
WorkListView.xaml:设置 ViewModel
<Page.Resources>
<x:String x:Key="AppName">My Worklist</x:String>
<vm:WorkListViewModel x:Key="viewModel"/>
</Page.Resources>
WorkListView.xaml:为网格设置 DataContext(仅供参考)
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" DataContext="{StaticResource viewModel}">
WorkListView.xaml:将命令绑定到 BottomAppBar 中的 AppBarButton(这不起作用;单击时 RefreshCommand 不会启动)
<Page.BottomAppBar>
<CommandBar x:Name="cmdBar" Background="#FF7300">
<AppBarButton Icon="Refresh" Label="Refresh" IsEnabled="True" Command="{Binding RefreshCommand}"/>
</CommandBar>
</Page.BottomAppBar>
WorkListView.xaml:网格内命令的替代绑定(这有效,但应用程序不再检测背景上的点击)
<Grid Grid.Row="2">
<CommandBar x:Name="cmdBar" Background="#FF7300">
<AppBarButton Icon="Refresh" Label="Refresh" IsEnabled="True" Command="{Binding RefreshCommand}"/>
</CommandBar>
</Grid>
WorkListViewModel.cs:将 RefreshCommand/Delegate RefreshCommand 设置为 OnExecuteRefreshCommand
private DelegateCommand _refreshCommand;
public DelegateCommand RefreshCommand
{
get { return _refreshCommand; }
set { this.SetProperty<DelegateCommand>(ref _refreshCommand, value); }
}
public WorkListViewModel()
{
this.ItemsView = this.CreateCollectionView(_workList);
this.ItemsView.CurrentChanged += this.OnCurrentItemChanged;
this.RefreshCommand = new DelegateCommand(this.OnExecuteRefreshCommand);
}
private async void OnExecuteRefreshCommand(object parameter)
{
ItemsView.Clear();
SetList(await Helpers.WebServiceConnector.refreshWorkList());
}
//编辑:我已经在 OnExecuteRefreshCommand 中放置了一个断点来检查应用程序是否中断。显然,它似乎根本不识别绑定。
另一个奇怪的事情是,当我在 AppBarButton 的命令绑定中右键单击“RefreshCommand”并单击“转到定义”时,Visual Studio 立即将我重定向到 ViewModel 中的 RefreshCommand 方法。