0

我正在使用 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 方法。

4

1 回答 1

0

I solved the Problem:

All i had to do was: put the ViewModel into the App.xaml Resources, instead into the Page Resources:

App.xaml Application.Resources

<Application.Resources>
    <ResourceDictionary>
        <vm:WorkListViewModel x:Key="workVM" />
    </ResourceDictionary>
</Application.Resources>

and binded it directly into the WorkListView Page and erased the binding within the Grid:

WorkListView.xaml

DataContext="{StaticResource workVM}"´

There was probably a conflict between two bindings before.

于 2013-11-13T10:14:12.990 回答