我有这个数据网格,并放置了一行按钮(3),但是由于某种原因,我的点击只在第一个按钮(最左侧)上注册。单击我的其他两个按钮不会引发任何事件。有趣的是,我尝试删除我的第一个按钮(现在只剩下两个),然后单击左侧的按钮,但是对于右侧的按钮却无效。我不知道我在做什么错。
这是我的xaml
<Datagrid
...>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Actions" MinWidth="80">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Style="{StaticResource FooActionButton}" x:Name="FooBar1"
Focusable="False"
IsHitTestVisible="True"
Command="{Binding Path=DataContext.CommandFooBar1, RelativeSource= {RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}">
<Button.Content>
<Image Source="/Foo.Bar.FooBar;component/Resources/foo-bar-1.png"/>
</Button.Content>
</Button>
<Button Style="{StaticResource FooActionButton}" x:Name="FooBar2"
Focusable="False"
IsHitTestVisible="True"
Command="{Binding Path=DataContext.CommandFooBar2, RelativeSource= {RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}">
<Button.Content>
<Image Source="/Foo.Bar.FooBar;component/Resources/foo-bar-2.png"/>
</Button.Content>
</Button>
<Button Style="{StaticResource FooActionButton}" x:Name="FooBar3"
Focusable="False"
IsHitTestVisible="True"
Command="{Binding Path=DataContext.CommandFooBar3, RelativeSource= {RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}">
<Button.Content>
<Image Source="/Foo.Bar.FooBar;component/Resources/foo-bar-3.png"/>
</Button.Content>
</Button>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
在我的ViewModel中:
public RelayCommand<Foo> CommandFooBar1
{
get
{
return _commandFooBar1 ?? (_commandFooBar1 ?? new RelayCommand<Foo>(foo=> ExecuteFooBar1(foo)));
}
}
private RelayCommand<Foo> _commandFooBar1 = null;
与其他中继命令基本相同的代码结构。我调试了一下,碰巧最左侧的任何按钮都被触发,并且它正确地调用了它的关联函数。如上所述,我只是无法使所有3个按钮正常工作。