为什么以下示例中的命令不能执行?AppBar中按钮的绑定命令不起作用
我在它与AppBar一个名为页面和按钮:
<Page
x:Class="App13.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Name="myPage"
>
<Page.BottomAppBar>
<AppBar>
<Button Content="OK" Command="{Binding OkCommand, ElementName=myPage}" />
</AppBar>
</Page.BottomAppBar>
</Page>
命令“OkCommand”在后台代码的定义如下(使用MVVM光框架):
public RelayCommand OkCommand
{
get
{
return m_OkCommand
?? (m_OkCommand = new RelayCommand(
async() =>
{
await new MessageDialog("OkCommand").ShowAsync();
}));
}
}
输出窗口中没有绑定错误或任何其他提示,让我知道为什么这不起作用。 (另外:如果按钮放在AppBar之外,一切正常)
有没有人有一个想法这里有什么错?
感谢您的例子。使用明确的ViewModel工作正常(并给我至少一些解决方法)。 但是,我应该对我的问题更加具体:如果OkCommand是在代码隐藏中定义的,那么无法通过“{Binding Path = OkCommand,ElementName pageRoot}”绑定到命名元素。 我再次对此非常满意。如果在页面XAML中定义了“pageRoot”的绑定,但在AppBar-XAML内使用绑定时不起作用。奇怪。对此有何想法? – CEvenSharper
@CEvenSharper看起来'AppBar'元素看不到页面的其余部分,因此'ElementName'绑定不起作用。既然你在代码后面有'Command',你可以直接使用'Click'事件处理程序而不是'Command',除非你还需要'CanExecute'来禁用它。或者你可以创建一个单独的'ViewModel',我通常找到一个更好的主意,而不是一个解决方法。 –